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();
}