如何在quick中使用tableview?

如何在quick中使用tableview?

=======================
参考:cocos2d-x-2.2.5/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/ExtensionTest.lua

quick里推荐使用纯lua滚动控件,请参考sample/ui

tableview 的好处是省很多内存,scrolloview做不到,特别是数据多的话

目前3.x版本我发现是支持的,2.2.5找不到tableview的回调和数据源的定义

没有让你用scrollview啊,是建议你改用UITableView

请问UITableView在哪呢?我在quick里头没找到,我的版本是2.2.5

在GitHub的2.2.5 master分支上

我的就是2.2.5 master分支,没找到,麻烦你说下具体的路径不,谢谢了

https://github.com/chukong/quick-cocos2d-x/tree/master/samples/ui

用UIListView显示很多数据的话,会影响性能啊,有解决方案吗?还是要自己再封装

其实cocos2d-x的官方samples(非quick的samples)里是有tableview的用法,可以参考下:cocos2d-x-2.2.5/samples/Lua/TestLua/Resources/luaScript/ExtensionTest/ExtensionTest.lua

local TableViewTestLayer = class(“TableViewTestLayer”)
TableViewTestLayer.__index = TableViewTestLayer

function TableViewTestLayer.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, TableViewTestLayer)
return target
end

function TableViewTestLayer.scrollViewDidScroll(view)
print(“scrollViewDidScroll”)
end

function TableViewTestLayer.scrollViewDidZoom(view)
print(“scrollViewDidZoom”)
end

function TableViewTestLayer.tableCellTouched(table,cell)
print("cell touched at index: " … cell:getIdx())
end

function TableViewTestLayer.cellSizeForTable(table,idx)
return 60,60
end

function TableViewTestLayer.tableCellAtIndex(table, idx)
local strValue = string.format("%d",idx)
local cell = table:dequeueCell()
local label = nil
if nil == cell then
cell = CCTableViewCell:new()
local sprite = CCSprite:create(“Images/Icon.png”)
sprite:setAnchorPoint(CCPointMake(0,0))
sprite:setPosition(CCPointMake(0, 0))
cell:addChild(sprite)

    label = CCLabelTTF:create(strValue, "Helvetica", 20.0)
    label:setPosition(CCPointMake(0,0))
    label:setAnchorPoint(CCPointMake(0,0))
    label:setTag(123)
    cell:addChild(label)
else
    label = tolua.cast(cell:getChildByTag(123),"CCLabelTTF")
    if nil ~= label then
        label:setString(strValue)
    end
end

return cell

end

function TableViewTestLayer.numberOfCellsInTableView(table)
return 25
end

function TableViewTestLayer:init()

local winSize = CCDirector:sharedDirector():getWinSize()

local tableView = CCTableView:create(CCSizeMake(600,60))
tableView:setDirection(kCCScrollViewDirectionHorizontal)
tableView:setPosition(CCPointMake(20, winSize.height / 2 - 150))
self:addChild(tableView)
--registerScriptHandler functions must be before the reloadData function
tableView:registerScriptHandler(TableViewTestLayer.scrollViewDidScroll,CCTableView.kTableViewScroll)
tableView:registerScriptHandler(TableViewTestLayer.scrollViewDidZoom,CCTableView.kTableViewZoom)
tableView:registerScriptHandler(TableViewTestLayer.tableCellTouched,CCTableView.kTableCellTouched)
tableView:registerScriptHandler(TableViewTestLayer.cellSizeForTable,CCTableView.kTableCellSizeForIndex)
tableView:registerScriptHandler(TableViewTestLayer.tableCellAtIndex,CCTableView.kTableCellSizeAtIndex)
tableView:registerScriptHandler(TableViewTestLayer.numberOfCellsInTableView,CCTableView.kNumberOfCellsInTableView)  
tableView:reloadData()

tableView = CCTableView:create(CCSizeMake(60, 350))
tableView:setDirection(kCCScrollViewDirectionVertical)
tableView:setPosition(CCPointMake(winSize.width - 150, winSize.height / 2 - 150))
tableView:setVerticalFillOrder(kCCTableViewFillTopDown)
self:addChild(tableView)
tableView:registerScriptHandler(TableViewTestLayer.scrollViewDidScroll,CCTableView.kTableViewScroll)
tableView:registerScriptHandler(TableViewTestLayer.scrollViewDidZoom,CCTableView.kTableViewZoom)
tableView:registerScriptHandler(TableViewTestLayer.tableCellTouched,CCTableView.kTableCellTouched)
tableView:registerScriptHandler(TableViewTestLayer.cellSizeForTable,CCTableView.kTableCellSizeForIndex)
tableView:registerScriptHandler(TableViewTestLayer.tableCellAtIndex,CCTableView.kTableCellSizeAtIndex)
tableView:registerScriptHandler(TableViewTestLayer.numberOfCellsInTableView,CCTableView.kNumberOfCellsInTableView)
tableView:reloadData()

-- Back Menu
local pToMainMenu = CCMenu:create()
CreateExtensionsBasicLayerMenu(pToMainMenu)
pToMainMenu:setPosition(CCPointMake(0, 0))
self:addChild(pToMainMenu,10)

return true

end

function TableViewTestLayer.create()
local layer = TableViewTestLayer.extend(CCLayer:create())
if nil ~= layer then
layer:init()
end

return layer

end

local function runTableViewTest()
local newScene = CCScene:create()
local newLayer = TableViewTestLayer.create()
newScene:addChild(newLayer)
return newScene
end

tableView 各种坑 啊