cctableview继承于CCScrollView和CCScrollViewDelegate,用于显示等宽高的元素.并支持滚动
test中的例子抽出来如下,并作修改,官方给的例子在拖拽之后会出现乱序
class TableViewTestLayer : public cocos2d::CCLayer, public cocos2d::extension::CCTableViewDataSource, public cocos2d::extension::CCTableViewDelegate { public: virtual void onEnter(); virtual void onExit(); virtual bool init(); void toExtensionsMainLayer(CCObject *sender); CREATE_FUNC(TableViewTestLayer); virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view); // 此函数不需要调用父类的函数,因为它是单独被调用的,当控件发生滚动时会发生,reloaddata也会发生。 virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {} virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell); virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table); // 返回每个元素的大小 virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx); // virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table); // 返回此tableview中有多少个元素 // when touching on the cell, it will highlight virtual void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell); virtual void tableCellUnhighlight(cocos2d::extension::CCTableView *table, cocos2d::extension::CCTableViewCell *cell); }; class CustomTableViewCell : public cocos2d::extension::CCTableViewCell { public: virtual void draw(); }; bool TableViewTestLayer::init() { if ( !CCLayer::init() ) { return false; } CCSize winSize = CCDirector::sharedDirector()->getWinSize(); CCTableView* tableView = CCTableView::create(this, CCSizeMake(320, 30)); tableView->setDirection(kCCScrollViewDirectionHorizontal); tableView->setPosition(ccp(20,winSize.height/2-30)); tableView->setDelegate(this); //this->addChild(tableView); tableView->reloadData(); tableView = CCTableView::create(this, CCSizeMake(60, 200)); tableView->setDirection(kCCScrollViewDirectionVertical); //tableView->setPosition(ccp(winSize.width-150,winSize.height/2-120)); tableView->setPosition(ccp(0 ,80)); tableView->setDelegate(this); tableView->setVerticalFillOrder(kCCTableViewFillTopDown); this->addChild(tableView); tableView->reloadData(); // Back Menu CCMenuItemFont *itemBack = CCMenuItemFont::create("Back", this, menu_selector(TableViewTestLayer::toExtensionsMainLayer)); itemBack->setPosition(ccp(50, 25)); CCMenu *menuBack = CCMenu::create(itemBack, NULL); menuBack->setPosition(CCPointZero); addChild(menuBack); return true; } void TableViewTestLayer::toExtensionsMainLayer(cocos2d::CCObject *sender) { } void TableViewTestLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell) { CCLOG("cell touched at index: %i", cell->getIdx()); } CCSize TableViewTestLayer::cellSizeForTable(CCTableView *table) { return CCSizeMake(60, 60); //return CCSizeMake(480, 320); } CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table, unsigned int idx) { CCLOG("tableCellAtIndex at index: %i", idx); CCString *string = CCString::createWithFormat("%d", idx); CCTableViewCell *cell = table->dequeueCell(); if (!cell) { cell = new CustomTableViewCell(); cell->autorelease(); } else { cell->removeAllChildrenWithCleanup(true); // 乱序在这里解决 } CCSprite *sprite = CCSprite::create("Icon.png"); sprite->setAnchorPoint(ccp(0, 0)); sprite->setPosition(ccp(0, 0)); sprite->setTag(789); cell->addChild(sprite); CCLabelTTF *label = CCLabelTTF::create(string->getCString(), "Helvetica", 20.0); label->setPosition(CCPointZero); label->setAnchorPoint(CCPointZero); label->setTag(123); cell->addChild(label); return cell; } // 当前元素被选中的时候高亮显示 void TableViewTestLayer::tableCellHighlight(CCTableView *table, CCTableViewCell *cell) { CCLOG(">>>>>>>>>>>>>>>>>>>>>>>>>tableCellHighlight<<<<<<<<<<<<<<<<<<<<"); //CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("HelloWorld.png"); CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789); pSprite->setColor(ccc3(120, 120, 120)); } void TableViewTestLayer::onEnter() { CCLayer::onEnter(); } void TableViewTestLayer::onExit() { //CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); CCLayer::onExit(); } // 取消元素高度显示 void TableViewTestLayer::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell) { CCLOG(">>>>>>>>>>>>>>>>>>>>>>>>>tableCellUnhighlight<<<<<<<<<<<<<<<<<<<<"); CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("Icon.png"); CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789); pSprite->setColor(ccc3(255, 255, 255)); } unsigned int TableViewTestLayer::numberOfCellsInTableView(CCTableView *table) { return 20; } void TableViewTestLayer::scrollViewDidScroll(cocos2d::extension::CCScrollView* view) { CCLOG("---> scrollViewDidScroll <--"); } void CustomTableViewCell::draw() { CCTableViewCell::draw(); }