##Cocos2dX中CCTableView使用中遇到的一个问题##
最近在做一个游戏原型,其中用到了CCTableView,在使用的过程中遇到了一个疑问。
为了方便说明问题,我用了Cocos2dx项目中的cocos2d-x-2.2/samples/Cpp/TestCpp
测试例子中的ExtensionsTest
下TableViewTest
来举例。
问题描述:当点击其中一个cell的时候,我为了记录我点击是哪个cell,我将该cell下的的背景图(tag设置为了100)设置显示为红色,当我点击了index为0也就是第一个cell的时候,第一个被设置成了红色,但是当我滑动这个tableView的时候,发现还有其他cell也被变成了红色。如下图所示。
##我的做法是这样的,不知道有啥问题,为什么会出现这个现象?##
修改tableCellAtIndex函数,增加一行代码:`sprite->setTag(100)`1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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函数1 2 3 4 5 6 7
| 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)); }
|