cocos2d-x的初步学习十一之CCTableView (转)

转自:http://blog.csdn.net/kuloveyouwei/article/details/9099361

在这篇文章中,我们将讲下CCTableView,顾名思义,CCTableView表试图,在ios里是tableview,android里是listview,都是差不多的意思,在cocos2dx中CCTableView继承自CCScrollview。OK,下面我们直接上代码:

在头文件.h中:

[cpp] view plain copy
  1. class HelloWorld : public cocos2d::CCLayer,public cocos2d::extension::CCTableViewDelegate,cocos2d::extension::CCTableViewDataSource  
  2. {  
  3. public:  
  4.     // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)  
  5.     virtual bool init();  
  6.   
  7.     // there's no 'id' in cpp, so we recommend to return the class instance pointer  
  8.     static cocos2d::CCScene* scene();  
  9.       
  10.     // a selector callback  
  11.     void menuCloseCallback(CCObject* pSender);  
  12.   
  13.     // preprocessor macro for "static create()" constructor ( node() deprecated )  
  14.     CREATE_FUNC(HelloWorld);  
  15.       
  16.       
  17.       
  18. public:  
  19.       
  20.     //CCTableViewDelegate继承自CCScrollViewDelegate  
  21.     virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);  
  22.       
  23.     virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view);  
  24.       
  25.     //点击哪个cell  
  26.     virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);  
  27.     //每个cell的size  
  28.     virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);  
  29.     //生成cell  
  30.     virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx);  
  31.     //cell的数量  
  32.     virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);  
  33.       
  34.     //按下去的时候,就是高亮显示,这里可以设置高亮状态  
  35.     virtual void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);  
  36.       
  37.     //松开的时候,取消高亮状态  
  38.     virtual void tableCellUnhighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);  
  39.   
  40.       
  41.       
  42.     void scrollBar(cocos2d::extension::CCTableView* table);  
  43.       
  44.       
  45. };  

.cpp中:
[cpp] view plain copy
  1. bool HelloWorld::init()  
  2. {  
  3.     //  
  4.     // 1. super init first  
  5.     if ( !CCLayer::init() )  
  6.     {  
  7.         return false;  
  8.     }  
  9.       
  10.       
  11.     CCSize visibSize=CCDirector::sharedDirector()->getVisibleSize();  
  12.       
  13.     CCTableView *tableView=CCTableView::create(this, CCSizeMake(visibSize.width, visibSize.height));  
  14.       
  15.     tableView->setDirection(kCCScrollViewDirectionVertical);  
  16.       
  17.     tableView->setPosition(CCPointZero);  
  18.   
  19.    // tableView->setAnchorPoint(ccp(0, 0));  
  20.     tableView->setDelegate(this);  
  21.       
  22.     tableView->setVerticalFillOrder(kCCTableViewFillTopDown);  
  23.       
  24.     this->addChild(tableView,1);  
  25.       
  26.     tableView->reloadData();  
  27.       
  28.       
  29.     return true;  
  30. }  

回调函数:
[cpp] view plain copy
  1. unsigned int HelloWorld::numberOfCellsInTableView(CCTableView *table)  
  2. {  
  3.   
  4.     return 10;  
  5.       
  6.   
  7. }  
  8.   
  9. CCTableViewCell* HelloWorld::tableCellAtIndex(CCTableView *table, unsigned int idx)  
  10. {  
  11.   
  12.     CCLOG("%d",idx);  
  13.     CCString *nameString=CCString::createWithFormat("icon_%d.png",idx+1);  
  14.   
  15.     CCTableViewCell *cell = table->dequeueCell();  
  16.       
  17.     if (!cell) {  
  18.           
  19.         cell = new CCTableViewCell();  
  20.           
  21.         cell->autorelease();  
  22.         CCSprite *bgSprite = CCSprite::create("cell.png");  
  23.         bgSprite->setAnchorPoint(CCPointZero);  
  24.         bgSprite->setPosition(CCPointZero);  
  25.         bgSprite->setTag(789);  
  26.         cell->addChild(bgSprite);  
  27.           
  28.           
  29.         CCSprite *iconSprite = CCSprite::create(nameString->getCString());  
  30.         iconSprite->setScale(0.6);  
  31.         iconSprite->setAnchorPoint(CCPointZero);  
  32.         iconSprite->setPosition(ccp(25, 10));  
  33.         iconSprite->setTag(123);  
  34.         cell->addChild(iconSprite);  
  35.           
  36.           
  37.         CCLabelTTF *pLabel = CCLabelTTF::create(nameString->getCString(), "Arial", 30.0);  
  38.         pLabel->setPosition(ccp(200, 10));  
  39.         pLabel->setTag(456);  
  40.         pLabel->setAnchorPoint(CCPointZero);  
  41.         cell->addChild(pLabel);  
  42.     }  
  43.     else  
  44.     {  
  45.           
  46.         //创建了就不需要再重新创建了,不然你会发现图片跟文字都不对  
  47.         CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage(nameString->getCString());  
  48.           
  49.         CCSprite *pSprite=(CCSprite *)cell->getChildByTag(123);  
  50.           
  51.         pSprite->setTexture(aTexture);  
  52.           
  53.       
  54.         CCLabelTTF *pLabel = (CCLabelTTF*)cell->getChildByTag(456);  
  55.         pLabel->setString(nameString->getCString());  
  56.       
  57.       
  58.           
  59.        // this->scrollBar(table);  
  60.       
  61.     }  
  62.       
  63.       
  64.     return cell;  
  65.   
  66.   
  67. }  
  68.   
  69.   
  70. CCSize HelloWorld::cellSizeForTable(CCTableView *table)  
  71. {  
  72.       
  73.       
  74.     CCSize visibSize=CCDirector::sharedDirector()->getVisibleSize();  
  75.   
  76.     return CCSizeMake(visibSize.width, 84);  
  77.       
  78.       
  79. }  
  80.   
  81. void HelloWorld::tableCellHighlight(CCTableView *table, CCTableViewCell *cell)  
  82. {  
  83.   
  84.     CCLOG("wwww");  
  85.   
  86.     CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("cell_selected.png");  
  87.       
  88.     CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);  
  89.       
  90.     pSprite->setTexture(aTexture);  
  91.   
  92.   
  93. }  
  94.   
  95. void HelloWorld::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell)  
  96. {  
  97.   
  98.   
  99.     CCLOG("dddd");  
  100.       
  101.   
  102.     CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("cell.png");  
  103.       
  104.     CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);  
  105.       
  106.     pSprite->setTexture(aTexture);  
  107.   
  108.   
  109.   
  110. }  
  111.   
  112.   
  113. void HelloWorld::tableCellTouched(CCTableView *table, CCTableViewCell *cell)  
  114. {  
  115.   
  116.   
  117.     CCLog("cell touched at index: %i", cell->getIdx());  
  118.   
  119.   
  120. }  


OK,我们看下效果图:


一个未选择状态,一个选中状态,注意,tableCellHighlight,tableCellUnhighlight,tableCellTouched的执行先后顺序为tableCellHighlight->tableCellUnhighlight->tableCellTouched。OK,就这么简单,貌似cctableview没有自带的滚动条,可能需要自己来实现,希望以后的版本中直接加入滚动条,这样会更方便~~~


你可能感兴趣的:(cocs2dx)