local MyTableView = class("MyTableView")
MyTableView.__index = MyTableView
MyTableView.property = {}
--这里是为了让layer能调用TableViewTestLayer的方法
function MyTableView.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, MyTableView)
return target
end
--滚动事件
function MyTableView.scrollViewDidScroll(view)
--print("滚动事件")
end
function MyTableView.scrollViewDidZoom(view)
print("scrollViewDidZoom")
end
--cell点击事件
function MyTableView.tableCellTouched(table,cell)
print("点击了cell:" .. cell:getIdx())
end
--cell的大小,注册事件就能直接影响界面,不需要主动调用
function MyTableView.cellSizeForTable(table,idx)
if MyTableView.property.cellSizeW and MyTableView.property.cellSizeH then
return MyTableView.property.cellSizeW,MyTableView.property.cellSizeH
end
return 150,150
end
--显示出可视部分的界面,出了裁剪区域的cell就会被复用
function MyTableView.tableCellAtIndex(table, idx)
local strValue = string.format("%d",idx)
print("数据加载"..strValue)
local cell = table:dequeueCell()
local label = nil
if nil == cell then
print("创建了新的cell")
cell = cc.TableViewCell:new()
--添加cell内容
-- local sprite = display.newSprite("res/apple.png")
-- sprite:setAnchorPoint(cc.p(0,0))
-- sprite:setPosition(cc.p(0, 0))
-- cell:addChild(sprite)
label = cc.Label:createWithSystemFont(strValue, "Helvetica", 40)
label:setPosition(cc.p(0,0))
label:setAnchorPoint(cc.p(0,0))
label:setColor(cc.c3b(255,0,0))
label:setTag(123)
cell:addChild(label)
else
print("使用已经创建过的cell")
label = cell:getChildByTag(123)
if nil ~= label then
label:setString(strValue)
end
end
return cell
end
--设置cell个数,注册就能生效,不用主动调用
function MyTableView.numberOfCellsInTableView(table)
if MyTableView.property.cellNum then
return MyTableView.property.cellNum
end
return 100
end
function MyTableView:init()
local visiableSize = cc.Director:getInstance():getVisibleSize()
local origin = cc.Director:getInstance():getVisibleOrigin()
local winSize = cc.Director:getInstance():getWinSize()
local isVERTICAL = MyTableView.property.isVERTICAL
local tableSize = isVERTICAL==true and cc.size(winSize.width - 20,150) or cc.size(200, winSize.height - 20)
if MyTableView.property.tableSize then
tableSize = MyTableView.property.tableSize
end
if isVERTICAL then
-----------------------------------------------------------
--创建TableView
local tableView = cc.TableView:create(tableSize)
--设置滚动方向 水平滚动
tableView:setDirection(cc.SCROLLVIEW_DIRECTION_HORIZONTAL)
-- tableView:setPosition(cc.p(10, winSize.height / 2))
tableView:setDelegate()
self:addChild(tableView)
--registerScriptHandler functions must be before the reloadData funtion
--注册脚本编写器函数必须在reloadData函数之前(有道自动翻译)
--cell个数
tableView:registerScriptHandler(MyTableView.numberOfCellsInTableView,cc.NUMBER_OF_CELLS_IN_TABLEVIEW)
--滚动事件
tableView:registerScriptHandler(MyTableView.scrollViewDidScroll,cc.SCROLLVIEW_SCRIPT_SCROLL)
tableView:registerScriptHandler(MyTableView.scrollViewDidZoom,cc.SCROLLVIEW_SCRIPT_ZOOM)
--cell点击事件
tableView:registerScriptHandler(MyTableView.tableCellTouched,cc.TABLECELL_TOUCHED)
--cell尺寸、大小
tableView:registerScriptHandler(MyTableView.cellSizeForTable,cc.TABLECELL_SIZE_FOR_INDEX)
--显示出可视部分的cell
tableView:registerScriptHandler(MyTableView.tableCellAtIndex,cc.TABLECELL_SIZE_AT_INDEX)
--调用这个才会显示界面
tableView:reloadData()
-----------------------------------------------------------
else
-----------------------------------------------------------
--跟上面差不多,这里是创建一个“垂直滚动”的TableView
tableView = cc.TableView:create(tableSize)
tableView:setDirection(cc.SCROLLVIEW_DIRECTION_VERTICAL)
-- tableView:setPosition(cc.p(winSize.width / 2, 10))
tableView:setDelegate()
tableView:setVerticalFillOrder(cc.TABLEVIEW_FILL_TOPDOWN)
self:addChild(tableView)
--registerScriptHandler functions must be before the reloadData funtion
--注册脚本编写器函数必须在reloadData函数之前(有道自动翻译)
--cell个数
tableView:registerScriptHandler(MyTableView.numberOfCellsInTableView,cc.NUMBER_OF_CELLS_IN_TABLEVIEW)
--滚动事件
tableView:registerScriptHandler(MyTableView.scrollViewDidScroll,cc.SCROLLVIEW_SCRIPT_SCROLL)
tableView:registerScriptHandler(MyTableView.scrollViewDidZoom,cc.SCROLLVIEW_SCRIPT_ZOOM)
--cell点击事件
tableView:registerScriptHandler(MyTableView.tableCellTouched,cc.TABLECELL_TOUCHED)
--cell尺寸、大小
tableView:registerScriptHandler(MyTableView.cellSizeForTable,cc.TABLECELL_SIZE_FOR_INDEX)
--显示出可视部分的cell
tableView:registerScriptHandler(MyTableView.tableCellAtIndex,cc.TABLECELL_SIZE_AT_INDEX)
--调用这个才会显示界面
tableView:reloadData()
-----------------------------------------------------------
end
return true
end
--这里是为了让layer能调用TableViewTestLayer的方法
function MyTableView.create(tableSize,cellSizeW,cellSizeH,cellNum,isVERTICAL)
MyTableView.property.cellSizeW = cellSizeW--Item宽度
MyTableView.property.cellSizeH = cellSizeH--Item长度
MyTableView.property.cellNum = cellNum--Item数量
MyTableView.property.isVERTICAL = isVERTICAL--true 水平滑动
MyTableView.property.tableSize = tableSize--显示区域大小 cc.size()
local layer = MyTableView.extend(cc.Layer:create())
if nil ~= layer then
layer:init()
end
return layer
end
return MyTableView