TableView C++

来源:互联网 发布:caffe bias term false 编辑:程序博客网 时间:2024/05/29 16:47
  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. }