在这篇文章中,我们将讲下CCTableView,顾名思义,CCTableView表试图,在ios里是tableview,android里是listview,都是差不多的意思,在cocos2dx中CCTableView继承自CCScrollview。OK,下面我们直接上代码:
在头文件.h中:
- class HelloWorld : public cocos2d::CCLayer,public cocos2d::extension::CCTableViewDelegate,cocos2d::extension::CCTableViewDataSource
- {
- public:
- // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
- virtual bool init();
- // there's no 'id' in cpp, so we recommend to return the class instance pointer
- static cocos2d::CCScene* scene();
- // a selector callback
- void menuCloseCallback(CCObject* pSender);
- // preprocessor macro for "static create()" constructor ( node() deprecated )
- CREATE_FUNC(HelloWorld);
- public:
- //CCTableViewDelegate继承自CCScrollViewDelegate
- virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);
- virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view);
- //点击哪个cell
- virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);
- //每个cell的size
- virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);
- //生成cell
- virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);
- //cell的数量
- virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);
- //按下去的时候,就是高亮显示,这里可以设置高亮状态
- virtual void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);
- //松开的时候,取消高亮状态
- virtual void tableCellUnhighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);
- void scrollBar(cocos2d::extension::CCTableView* table);
- };
.cpp中:
- bool HelloWorld::init()
- {
- //
- // 1. super init first
- if ( !CCLayer::init() )
- {
- return false;
- }
- CCSize visibSize=CCDirector::sharedDirector()->getVisibleSize();
- CCTableView *tableView=CCTableView::create(this, CCSizeMake(visibSize.width, visibSize.height));
- tableView->setDirection(kCCScrollViewDirectionVertical);
- tableView->setPosition(CCPointZero);
- // tableView->setAnchorPoint(ccp(0, 0));
- tableView->setDelegate(this);
- tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
- this->addChild(tableView,1);
- tableView->reloadData();
- return true;
- }
回调函数:
- unsigned int HelloWorld::numberOfCellsInTableView(CCTableView *table)
- {
- return 10;
- }
- CCTableViewCell* HelloWorld::tableCellAtIndex(CCTableView *table, unsigned int idx)
- {
- CCLOG("%d",idx);
- CCString *nameString=CCString::createWithFormat("icon_%d.png",idx+1);
- CCTableViewCell *cell = table->dequeueCell();
- if (!cell) {
- cell = new CCTableViewCell();
- cell->autorelease();
- CCSprite *bgSprite = CCSprite::create("cell.png");
- bgSprite->setAnchorPoint(CCPointZero);
- bgSprite->setPosition(CCPointZero);
- bgSprite->setTag(789);
- cell->addChild(bgSprite);
- CCSprite *iconSprite = CCSprite::create(nameString->getCString());
- iconSprite->setScale(0.6);
- iconSprite->setAnchorPoint(CCPointZero);
- iconSprite->setPosition(ccp(25, 10));
- iconSprite->setTag(123);
- cell->addChild(iconSprite);
- CCLabelTTF *pLabel = CCLabelTTF::create(nameString->getCString(), "Arial", 30.0);
- pLabel->setPosition(ccp(200, 10));
- pLabel->setTag(456);
- pLabel->setAnchorPoint(CCPointZero);
- cell->addChild(pLabel);
- }
- else
- {
- //创建了就不需要再重新创建了,不然你会发现图片跟文字都不对
- CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage(nameString->getCString());
- CCSprite *pSprite=(CCSprite *)cell->getChildByTag(123);
- pSprite->setTexture(aTexture);
- CCLabelTTF *pLabel = (CCLabelTTF*)cell->getChildByTag(456);
- pLabel->setString(nameString->getCString());
- // this->scrollBar(table);
- }
- return cell;
- }
- CCSize HelloWorld::cellSizeForTable(CCTableView *table)
- {
- CCSize visibSize=CCDirector::sharedDirector()->getVisibleSize();
- return CCSizeMake(visibSize.width, 84);
- }
- void HelloWorld::tableCellHighlight(CCTableView *table, CCTableViewCell *cell)
- {
- CCLOG("wwww");
- CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("cell_selected.png");
- CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);
- pSprite->setTexture(aTexture);
- }
- void HelloWorld::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell)
- {
- CCLOG("dddd");
- CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("cell.png");
- CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);
- pSprite->setTexture(aTexture);
- }
- void HelloWorld::tableCellTouched(CCTableView *table, CCTableViewCell *cell)
- {
- CCLog("cell touched at index: %i", cell->getIdx());
- }
一个未选择状态,一个选中状态,注意,tableCellHighlight,tableCellUnhighlight,tableCellTouched的执行先后顺序为tableCellHighlight->tableCellUnhighlight->tableCellTouched。OK,就这么简单,貌似cctableview没有自带的滚动条,可能需要自己来实现,希望以后的版本中直接加入滚动条,这样会更方便~~~