TableView (cocos-2dx lua)

岑叶秋
2023-12-01

TableView是Cocos-2dx一个实现滑动功能的控件。比如好友列表,可以上下滑动。TableView中的元素叫cell(被滑动的那些对象),每个cell有唯一的idx。

常用方法:

1.creat(cc.size(x,y))
创建一个TableView,参数代表TableView大小,返回一个TableView对象
例:local tableView = cc.TableView:creat(cc.size(500,600)) --得到一个500*600的TableView

2.setDirection(cc.SCROLLVIEW_DIRECTION_HORIZONTAL) --横向滑动
设置滑动方向, HORIZONTAL:横向滑动 VERTICAL:纵向滑动
例:tableView:setDirection(cc.SCROLLVIEW_DIRECTION_HORIZONTAL) --将tableView设置成横向滑动

3.setPosition(cc.p(x,y))
设置位置
例:tableView:setPosition(cc.p(10,20)) --设置tableView坐标为(10,20)

4.setDelegate()
设置事件
例:tableView:setDelegate() --设置tableView可以出发触发事件

5.setVerticalFillOrder(cc.TABLEVIEW_FILL_TOPDOWN)
设置TableView中呈现元素的idx排列方式,TOP_DOWN:idx序号从小到大 BOTTOM_UP:idx序号从大到小
例:tableView:setVerticalFillOrder(cc.TABLEVIEW_FILL_TOPDOWN) --将tableView中tableCellAtIndex事件中的idx序号设置为从小到大

6.reloadData()
重新加载,在TableView初始化或者修改之后需要调用该方法重新加载TableView
例:tableView:reloadData() --重新加载tableView

常用相关事件
1.tableView:registerScriptHandler(tableCellTouched,cc.TABLECELL_TOUCHED)
触碰事件,当触碰(点击)到tableView时会调用tableCellTouched方法

2.tableView:registerScriptHandler(cellSizeForTable, cc.TABLECELL_SIZE_FOR_INDEX);
调用cellSizeForTable方法,设置需要创建cell的尺寸

3.tableView:registerScriptHandler(tableCellAtIndex, cc.TABLECELL_SIZE_AT_INDEX);
调用tableCellAtIndex方法,控制cell的生成

4.tableView:registerScriptHandler(numberOfCellsInTableView, cc.NUMBER_OF_CELLS_IN_TABLEVIEW);
调用numberOfCellsInTableView方法,返回tableView需要生成的cell数量

tableCellTouched方法:

function tableCellTouched(view,cell)
	print("当触碰(点击)到tableView时会调用这个方法方法")
end

cellSizeForTable方法:

--返回cell的大小(x,y)
function cellSizeForTable(table,idx)
	--return x,y
	return 50,50 	--设置cell大小为50*50
end

tableCellAtIndex方法:

function tableCellAtIndex(table,idx)
	--设置cell
	--TableView会调用这个方法10次,idx从0到9(因为设置了要生成10个cell,因为设置了idx从小到大)
	--假设对象资源信息在self.list中
	local cell = table:dequeueCell()	--获取当前cell
	if cell == nil then					--如果cell不存在,创建一个新的。当第一次调用该方法时会出现这种情况(idx为0的时候)
		cell = cc.TableViewCell:new()
	end
	local item=cell:getChildByTag(1)	--获得cell的子节点(我们需要显示的资源对象)
	if not item then					--如果cell没有子节点,新建一个资源对象,设置tag,并把该对象加入到cell的子节点。当第一次调用该方法时会出现这种情况(idx为0的时候)
		item = cc.item:create(self.list[idx+1])		--用self.list资源创建一个新对象,(创建对象的方式根据对象选择)
		item:setTag(1)								
		cell:addChild(item)							
	end
	if item then						--cell有子节点,更新子节点信息(当第一次创建cell之后,不需要在额外创建新的cell和item,只需要更新item信息即可)
		item = cc.item:creat(self.list[idx+1])
	end
	return cell 		--返回一个cell

end

numberOfCellsInTableView方法:

--返回你想要设置cell的数量
function numberOfCellsInTableView()
	--return num
	return 10	--设置10个cell
end

note

1.程序运行后需要先调用reloadData载入TableView,TableView会触发事件生成好所有的cell,滑动的时候再把对应的cell显示出来。
2.如果第一次运行程序的时候发现没有图像呈现,但滑动TableView之后出现,表示没有初始化TableView,注意调用reloadData的位置(调用时间晚了)
3.cell的坐标位置是相对tableView的位置,cell不设置位置默认为相对tableView位置坐标(0,0)(建议不为cell设置位置,可能会出现边缘cell显示不完全的问题)

 类似资料: