TableView
在cocos2d-x中集成了一些扩展插件,这些引用文件都可以在cocos2d-x目录下的extentions下找到,其中常用的scrollView和tableView的引用文件在GUI目录下。若想深入理解scrollView和tableView,可参考这两篇博文:cocos2d-x学习日志(7) --CCScrollView和CCTableView的使用 和 cocos2d-x 菜鸟学习笔记七(界面控件之scrollView与tableView)
但本教程,不详细介绍了。直接上代码:
-- for CCLuaEngine traceback
function __G__TRACKBACK__(msg)
print("----------------------------------------")
print("LUA ERROR: " .. tostring(msg) .. "\n")
print(debug.traceback())
print("----------------------------------------")
end
local function main()
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
local cclog = function(...)
print(string.format(...))
end
require "hello2"
cclog("result is " .. myadd(3, 5))
---------------
local function createTest()
local TestLayer = CCLayer:create()
local proxy = LuaProxy:create()
proxy:retain() -- hold the proxy, while the button gone, release the proxy.
local n = proxy:readCCBFromFile("ccbResources/ccb/Test.ccbi") -- Got a CCNode
local l = tolua.cast(n, "CCLayer") -- Cast the node into CCLayer
TestLayer:addChild(l)
--绑定一个node节点
local NodeBg = tolua.cast(proxy:getNode"NodeBg","CCNode")
local data = {}
for i = 1,10 do table.insert(data,"Data"..i) end --装入tableview的数据源
local h = LuaEventHandler:create(function(fn, table, a1, a2)
local r
if fn == "cellSize" then
r = CCSizeMake(480,30) --每格的尺寸
elseif fn == "cellAtIndex" then
-- 请求“格”对象,a1是格索引(从0开始),a2是缓存的格对象(可能为空)
-- 在此建立“格”对象并填充其要显示的内容。
if not a2 then
a2 = CCTableViewCell:create()
-- Build cell struct, just like load ccbi or add sprite
-- 建立“格”对象的结构,不要在此设定其显示的内容。
a2:addChild(CCLabelTTF:create("", "Arial", 20), 0, 1)
--这里就相当cell容器,可以装入ccbi层、精灵、菜单等控件
local spriteDemo = CCSprite:create("btn-back-0.png")
spriteDemo:setAnchorPoint(ccp(0,0))
a2:addChild(spriteDemo)
end
-- 修改“格”对象的内容
tolua.cast(a2:getChildByTag(1), "CCLabelTTF"):setString(data[a1 + 1])
r = a2
elseif fn == "numberOfCells" then
r = #data
-- Cell events:
-- 表格事件:
elseif fn == "cellTouched" then -- A cell was touched, a1 is cell that be touched. This is not necessary.
elseif fn == "cellTouchBegan" then -- A cell is touching, a1 is cell, a2 is CCTouch
elseif fn == "cellTouchEnded" then -- A cell was touched, a1 is cell, a2 is CCTouch
elseif fn == "cellHighlight" then -- A cell is highlighting, coco2d-x 2.1.3 or above
elseif fn == "cellUnhighlight" then -- A cell had been unhighlighted, coco2d-x 2.1.3 or above
elseif fn == "cellWillRecycle" then -- A cell will be recycled, coco2d-x 2.1.3 or above
end
return r
end)
--创建tableview
local t = LuaTableView:createWithHandler(h,CCSizeMake(480,200))
t:setBounceable(true)
--节点定位tableview
NodeBg:addChild(t,1)
return TestLayer
end
-- run
local sceneGame = CCScene:create()
sceneGame:addChild(createTest())
CCDirector:sharedDirector():runWithScene(sceneGame)
end
xpcall(main, __G__TRACKBACK__)
效果图:
转载请注明出处:http://blog.csdn.net/rexuefengye/article/details/16355571