HappyCoding:] ChildhoodAndy

思维世界的发展,在某种意义上说,就是对惊奇的不断摆脱。——爱因斯坦

CCTableView问题记录

| Comments

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


最近在做一个游戏原型,其中用到了CCTableView,在使用的过程中遇到了一个疑问。
为了方便说明问题,我用了Cocos2dx项目中的cocos2d-x-2.2/samples/Cpp/TestCpp测试例子中的ExtensionsTestTableViewTest来举例。

问题描述:当点击其中一个cell的时候,我为了记录我点击是哪个cell,我将该cell下的的背景图(tag设置为了100)设置显示为红色,当我点击了index为0也就是第一个cell的时候,第一个被设置成了红色,但是当我滑动这个tableView的时候,发现还有其他cell也被变成了红色。如下图所示。

我的做法是这样的,不知道有啥问题,为什么会出现这个现象?

修改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));
}

CCTableView

Comments

comments powered by Disqus