cocos2d-x学习之路(15)--CCTaleView的使用

cocos2d-x 2.1 用CCTableView替换了原本的CCListView。为了使用CCTableView达到想要的功能,费了整整一天的功夫,个人感觉这个框架用来添加静态的表格还是比较方便的,但是如果要动态增加表格cell 或者修改表格cell的值就各种bug.例如我要添加10个cell,但是我希望每点击一次按钮添加一个,表格可视范围是5个,当表格处于表格的可视范围内时没有问题,但是超过5个之后顺序就完全打乱了。网上搜了好久都没有解决的办法,源码看了半天也没出问题,只好用其他方法解决。

 

关于CCTaleView最基本的使用方法,这里不再说明,只说问题和解决方法。

首先是动态增加的问题,TableView是我自定义的表格类,继承了public CCLayer,public extension::CCTableViewDataSource,public CCTableViewDelegate

unsigned int TableView::numberOfCellsInTableView(CCTableView *table)
{
 return m_numCell;
}

这个方法是返回表格的最大子项数目,当调用reloadData()后,将自动按照返回的数目m_numCell 创建表格,所以要实现动态增加,就在reloadData()前让返回值+1,

CCTableViewCell* TableView::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
	CCString *string = CCString::createWithFormat("%d", idx);
	CCTableViewCell *cell = table->dequeueCell();
	if (!cell) 
	{
		cell = new CCTableViewCell();
		cell->autorelease();
		CCSprite *sprite = CCSprite::create("table1.png");
		sprite->setAnchorPoint(CCPointZero);
		cell->addChild(sprite);
		
		createCell(cell,m_infoArray[idx]);
	}else
	{
		int id = (idx+m_id)%10;
		updateCell(cell,m_infoArray[id]);
	
	}

	return cell;
}


这个方法负责创建和更新表格,但是在我的m_numCell超过5后,我发现这个函数就不会再调用if(!cell)的内容,但是表格子项还是会增加啊,只不过顺序完全不对,坑爹啊。

经过实验发现不管表格内容顺序怎么变,但是参数 idx 始终是从0到m_nullCell的循环,所以我将想要表格显示的东西存在了一个数组里,当需要增加表格子项时,先添加到数组中,然后在if(!cell)中使用cell->addchilid(m_infoArray[idx],zOder,tag ) ,(我的m_infoArray[]存的是字符串,实际上不能直接addchilid,这里只是为了简单 )。在else中 使用 x= getchilidbyTag(tag),,x->setString(m_infoArray[idx]) 然后动态添加就没有问题了。

下次再写动态修改的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值