quick cocos2d-x 使用CCTableView 例子

可以运行,已经测试过了,参考网络上别人的代码,觉得很有用,记录。直接上代码:

发现一个很坑爹的地方,就是tableview定size的宽高,与tableview的cell的高宽是恰恰相反。。这个API让我有点凌乱..

(注意方法声明的时候,用的.跟:  不可以混用。不然就错了~~)

 1 --
 2 -- Date: 2014-11-13 15:55:20
 3 --
 4 --调用代码: local rlayer = require("app.scenes.TableViewLayer").new()
 5         --  rlayer:setAnchorPoint(ccp(0, 0))
 6         --  rlayer:setPosition(ccp(0, 0))
 7         --  self:addChild(rlayer)
 8 local TableViewLayer = class("TableViewLayer", function()
 9     return display.newLayer()
10 end)
11 
12 function TableViewLayer:ctor()
13     self:onEnter()
14 end
15 
16 function TableViewLayer.scrollViewDidScroll(view)
17     print("scrollViewDidScroll")
18 end
19 
20 function TableViewLayer.scrollViewDidZoom(view)
21     print("scrollViewDidZoom")
22 end
23 
24 function TableViewLayer.tableCellTouched(table,cell)
25     print("cell touched at index: " .. cell:getIdx())
26 end
27 
28 function TableViewLayer.cellSizeForTable(table,idx) 
29     return 30,60   --返回tableview中一个单位cell的高,宽
30 end
31 
32 function TableViewLayer.tableCellAtIndex(table, idx)
33     local strValue = string.format("%d",idx)
34     local cell = table:dequeueCell()
35     local label = nil
36     if nil == cell then
37         cell = CCTableViewCell:new()
38         --底层
39         local table_bg = CCSprite:create("res/table_bg.png")
40         table_bg:setAnchorPoint(CCPointMake(0,0))
41         table_bg:setPosition(CCPointMake(0, 0))
42         cell:addChild(table_bg)
43 
44         --图片层
45         local sprite = CCSprite:create("res/icon.png")
46         sprite:setAnchorPoint(CCPointMake(0,0))
47         sprite:setPosition(CCPointMake(0, 0))
48         cell:addChild(sprite)
49 
50         --文字层
51         label = CCLabelTTF:create(strValue, "Helvetica", 20.0)
52         label:setPosition(CCPointMake(0,0))
53         label:setAnchorPoint(CCPointMake(0,0))
54         label:setTag(123)
55         cell:addChild(label)
56     else
57         label = tolua.cast(cell:getChildByTag(123),"CCLabelTTF")
58         if nil ~= label then
59             label:setString(strValue)
60         end
61     end
62 
63     return cell
64 end
65 
66 --tableview中的cell个数
67 function TableViewLayer.numberOfCellsInTableView(table)
68    return 25
69 end
70 
71 function TableViewLayer:onEnter()
72     local table_view = CCTableView:create(CCSizeMake(60, 500))  --设定tableview的宽、高。tableview的大小决定滑动tableview的可触摸区域
73     table_view:setAnchorPoint(ccp(0, 1))
74     table_view:setDirection(kCCScrollViewDirectionVertical)
75     table_view:setPosition(CommonAPI:getCenterX()/2,CommonAPI:getCenterY()/2)
76     self:addChild(table_view)
77 
78     table_view:setVerticalFillOrder(kCCTableViewFillTopDown) --kCCTableViewFillBottomUp
79     table_view:registerScriptHandler(self.scrollViewDidScroll,CCTableView.kTableViewScroll)
80     table_view:registerScriptHandler(self.scrollViewDidZoom,CCTableView.kTableViewZoom)
81     table_view:registerScriptHandler(self.tableCellTouched,CCTableView.kTableCellTouched)
82     table_view:registerScriptHandler(self.cellSizeForTable,CCTableView.kTableCellSizeForIndex)
83     table_view:registerScriptHandler(self.tableCellAtIndex,CCTableView.kTableCellSizeAtIndex)
84     table_view:registerScriptHandler(self.numberOfCellsInTableView,CCTableView.kNumberOfCellsInTableView)
85     table_view:reloadData()
86 end
87 
88 return TableViewLayer

over~

注:在使用过程中,向下拖拉进度条太大力的时候,会发现tableview的单元cell乱序的情况。

解决办法是:去除我上面贴的代码的36行判断语句。

原文地址:https://www.cnblogs.com/vokie/p/4095453.html