Cocos2dX之CCTableView使用问题记录

Cocos2dX中CCTableView使用中遇到的一个问题

最近在做一个游戏原型,其中用到了CCTableView,在使用的过程中遇到了一个疑问。 为了方便说明问题,我用了Cocos2dx项目中的cocos2d-x-2.2/samples/Cpp/TestCpp测试例子中的ExtensionsTest下TableViewTest来举例。
问题描述:当点击其中一个cell的时候,我为了记录我点击是哪个cell,我将该cell下的的背景图(tag设置为了100)设置显示为红色,当我点击了index为0也就是第一个cell的时候,第一个被设置成了红色,但是当我滑动这个tableView的时候,发现还有其他cell也被变成了红色。如下图所示。

Cocos2dX之CCTableView使用问题记录_第1张图片

Cocos2dX之CCTableView使用问题记录_第2张图片Cocos2dX之CCTableView使用问题记录_第3张图片Cocos2dX之CCTableView使用问题记录_第4张图片

  • 修改tableCellAtIndex函数,增加一行代码:sprite->setTag(100)
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;
}
  • 修改tableCellTouched函数
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));
}


这里为什么会出现这个问题?

你可能感兴趣的:(cocos2dx,CCTableView)