TableView C++

  1. #pragma once;  
  2.   
  3. #include "cocos2d.h"  
  4. using namespace cocos2d;  
  5.   
  6. //使用CCTableView必須包含擴展庫和命名空間  
  7. #include "cocos-ext.h"  
  8. USING_NS_CC_EXT;  
  9.   
  10. //需要實現CCTabelViewDelegate和CCTabelViewDataSource這倆個接口  
  11. class tableTest : public cocos2d::CCLayer,public CCTableViewDelegate,public CCTableViewDataSource  
  12. {  
  13. public:  
  14.     virtual bool init();    
  15.   
  16.     static cocos2d::CCScene* scene();  
  17.   
  18.     CREATE_FUNC(tableTest);  
  19.   
  20.     //繼承自以上的接口需要實現的方法如下  
  21.     //從CCTableViewDataSource繼承下來的  
  22.   
  23.     CCSize tableCellSizeForIndex(CCTableView * table,unsigned int index);  
  24.     CCTableViewCell * tableCellAtIndex(CCTableView * table,unsigned int index);  
  25.     unsigned int numberOfCellsInTableView(CCTableView * table);  
  26.         virtual CCSize  cellSizeForTable (CCTableView *table);  
  27.           
  28.     //以下倆個函數可以覆寫,也可以不覆寫,是從CCTableViewDelegate繼承下來的  
  29.     void tableCellHighlight(CCTableView * table,CCTableViewCell * cell);  
  30.     void tableCellUnhighlight(CCTableView * table,CCTableViewCell * cell);  
  31.         void tableCellTouched(CCTableView * table,CCTableViewCell * cell);  
  32.         virtual void    tableCellWillRecycle (CCTableView *table, CCTableViewCell *cell);  
  33.     //因爲繼承自CCScrollViewDelegate 所以要實現這倆個方法,裏邊一般都不寫東西  
  34.     void scrollViewDidScroll(CCScrollView *){};  
  35.     void scrollViewDidZoom(CCScrollView *){};  
  36. };  





[cpp] view plain copy
  1. #include "tableTest.h"  
  2. USING_NS_CC_EXT;  
  3. USING_NS_CC;  
  4. bool tableTest::init()  
  5. {  
  6.     if ( !CCLayer::init() )  
  7.     {  
  8.         return false;  
  9.     }  
  10.   
  11.   
  12.     CCSize size = CCDirector::sharedDirector()->getWinSize();  
  13.   
  14.   
  15.     /* 
  16.     創建一個豎直方向的tableview 
  17.     */  
  18.   
  19.   
  20.     //初始化的時候第一個參數是CCTableViewDataSource,第二個參數代表tableview的大小  
  21.     CCTableView * table = CCTableView::create(this,CCSize(100,320));  
  22.   
  23.   
  24.     //設置delegate代理  
  25.     table->setDelegate(this);  
  26.   
  27.   
  28.     //設置tableview的滑動的方向  
  29.     //kCCScrollViewDirectionHorizontal 水平  
  30.     //kCCScrollViewDirectionVertical 豎直  
  31.     table->setDirection(kCCScrollViewDirectionVertical);  
  32.   
  33.   
  34.     //CCTableView默認是以左下角點設置座標位置的,它繼承自CCLayer,這一點不難理解  
  35.     table->setPosition(ccp(size.width/5,0));  
  36.     table->setDataSource(this);  
  37.     this->addChild(table);  
  38.   
  39.   
  40.     /* 
  41.     創建一個水平方向的tableview 
  42.     */  
  43.     CCTableView * tableView = CCTableView::create(this,CCSize(size.width/2,50));  
  44.     tableView->setDelegate(this);  
  45.     tableView->setDirection( kCCScrollViewDirectionHorizontal);  
  46.     tableView->setPosition(ccp(size.width/2,size.height/2));  
  47.     table->setDataSource(this);  
  48.     this->addChild(tableView);  
  49.     //這句話一定要加上啊,意思是用現有的配置去刷新所有的cell方法被調用之後,系統會重新執行一遍TableViewDelegate的相關函數,最主要的cellFor***方法,單元格的設置信息會被重新執行一遍。  
  50.     tableView->reloadData(); //相當android中adapte.notificydatachange();  
  51.   
  52.   
  53.     return true;  
  54. }  
  55.   
  56.   
  57.   
  58.   
  59.   
  60.   
  61. //這個函數是用來獲得cell的  
  62. CCTableViewCell * tableTest::tableCellAtIndex(CCTableView * table,unsigned int index)  
  63. {  
  64.     CCString * string = CCString::createWithFormat("%d",index+1);  
  65.   
  66.   
  67.     //獲得一個可用的cell,因爲在我們滑動cell的時候有些cell是顯示的,有些不是顯示出來的,把沒有渲染的cell拿過來  
  68.     //這樣就不用重新new出一個cell了,這樣的話可以減小內存的開銷  
  69.     CCTableViewCell * cell = table->dequeueCell();  
  70.     if(!cell)  
  71.     {  
  72.         cell = new CCTableViewCell();  
  73.         cell->autorelease();  
  74.   
  75.   
  76.         //添加背景圖片到cell中,便於區分邊界  
  77.         CCSprite * background = CCSprite::create("cell.png");  
  78.         background->setAnchorPoint(ccp(0,0));  
  79.         background->setPosition(CCPointZero);  
  80.         cell->addChild(background,0);  
  81.   
  82.   
  83.         //添加文本信息到cell中  
  84.         CCLabelTTF * text = CCLabelTTF::create(string->getCString(),"",20);  
  85.         text->setPosition(ccp(25,25));  
  86.         text->setTag(1);  
  87.         text->setColor(ccc3(255,0,0));  
  88.         cell->addChild(text,1);  
  89.   
  90.   
  91.         //添加精靈到cell的中心位置  
  92.         CCSprite * sprite = CCSprite::create("icon.png");  
  93.         sprite->setPosition(ccp(50,25));  
  94.         cell->addChild(sprite,1);  
  95.     }  
  96.     //else中獲得是沒有渲染出來的cell,cell中原有的內容還存在  
  97.     else  
  98.     {  
  99.         //改變原來cell中的文本信息  
  100.         CCLabelTTF * text = (CCLabelTTF *)cell->getChildByTag(1);  
  101.         text->setString(string->getCString());  
  102.     }  
  103.   
  104.   
  105.     return cell;  
  106. }  
  107.   
  108.   
  109. //這裏設置每個cell的大小  
  110. CCSize tableTest::tableCellSizeForIndex(CCTableView * table,unsigned int index)  
  111. {  
  112.     if(index=3){  
  113.         return CCSize(300,50);}  
  114.     else{  
  115.         return CCSize(100,50);  
  116.     }  
  117. }  
  118.   
  119.   
  120. //這裏設置一共有多少個cell  
  121. unsigned int tableTest::numberOfCellsInTableView(CCTableView * table)  
  122. {  
  123.     return 20;  
  124. }  
  125. //和tableCellSizeForIndex有什麼區別不明白  
  126. cocos2d::CCSize tableTest::cellSizeForTable(CCTableView *table)  
  127. {  
  128.     return CCSize(200,50);  
  129. }  
  130.   
  131.   
  132.   
  133.   
  134.   
  135.   
  136.   
  137.   
  138. //如果某個cell被點擊了,則會調用此函數  
  139. void tableTest::tableCellHighlight(CCTableView * table,CCTableViewCell * cell)  
  140. {  
  141.     CCLog("%d:tableCellHighlight!",cell->getIdx()+1);  
  142. }  
  143.   
  144.   
  145. //點擊之後會調用這個函數,觀察這幾個函數的調用順序,發現highlight首先調用  
  146. //unhighlight然後調用,最後是tableCellTouched  
  147. void tableTest::tableCellUnhighlight(CCTableView * table,CCTableViewCell * cell)  
  148. {  
  149.     CCLog("%d:tableCellUnhighlight!",cell->getIdx()+1);  
  150. }  
  151. //這裏設置cell被點擊以後的回調函數  
  152. void tableTest::tableCellTouched(CCTableView * table,CCTableViewCell * cell)  
  153. {  
  154.     CCLog("%d:tableCellTouched!",cell->getIdx()+1);  
  155. }  
  156. void tableTest::tableCellWillRecycle(CCTableView *table, CCTableViewCell *cell)  
  157. {  
  158.     CCLog("%d:tableCellWillRecycle!",cell->getIdx()+1);  
  159. }  
  160. cocos2d::CCScene* tableTest::scene()  
  161. {  
  162.     CCScene* scene=CCScene::create();  
  163.     scene->addChild(tableTest::create());  
  164.     return scene;  
  165. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章