Cocos2dX中CCTableView使用中遇到的一个问题
最近在做一个游戏原型,其中用到了CCTableView,在使用的过程中遇到了一个疑问。
为了方便说明问题,我用了Cocos2dx项目中的cocos2d-x-2.2/samples/Cpp/TestCpp
测试例子中的ExtensionsTest
下TableViewTest
来举例。
问题描述:当点击其中一个cell的时候,我为了记录我点击是哪个cell,我将该cell下的的背景图(tag设置为了100)设置显示为红色,当我点击了index为0也就是第一个cell的时候,第一个被设置成了红色,但是当我滑动这个tableView的时候,发现还有其他cell也被变成了红色。如下图所示。
我的做法是这样的,不知道有啥问题,为什么会出现这个现象?
CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table, unsigned int idx)
{
CCString *string = CCString::createWithFormat("%d", idx);
CCTableViewCell *cell = table->dequeueCell();
if (!cell) {
cell = new CustomTableViewCell();
cell->autorelease();
CCSprite *sprite = CCSprite::create("Images/Icon.png");
sprite->setAnchorPoint(CCPointZero);
sprite->setPosition(ccp(0, 0));
sprite->setTag(100);
cell->addChild(sprite);
CCLabelTTF *label = CCLabelTTF::create(string->getCString(), "Helvetica", 20.0);
label->setPosition(CCPointZero);
label->setAnchorPoint(CCPointZero);
label->setTag(123);
cell->addChild(label);
}
else
{
CCLabelTTF *label = (CCLabelTTF*)cell->getChildByTag(123);
label->setString(string->getCString());
}
return cell;
}
void TableViewTestLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell)
{
CCLOG("cell touched at index: %i", cell->getIdx());
CCSprite* sprite = (CCSprite*)cell->getChildByTag(100);
sprite->setColor(ccc3(255, 0, 0));
}