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]) 然后动态添加就没有问题了。
下次再写动态修改的问题。