- #pragma once;
- #include "cocos2d.h"
- using namespace cocos2d;
- //使用CCTableView必須包含擴展庫和命名空間
- #include "cocos-ext.h"
- USING_NS_CC_EXT;
- //需要實現CCTabelViewDelegate和CCTabelViewDataSource這倆個接口
- class tableTest : public cocos2d::CCLayer,public CCTableViewDelegate,public CCTableViewDataSource
- {
- public:
- virtual bool init();
- static cocos2d::CCScene* scene();
- CREATE_FUNC(tableTest);
- //繼承自以上的接口需要實現的方法如下
- //從CCTableViewDataSource繼承下來的
- CCSize tableCellSizeForIndex(CCTableView * table,unsigned int index);
- CCTableViewCell * tableCellAtIndex(CCTableView * table,unsigned int index);
- unsigned int numberOfCellsInTableView(CCTableView * table);
- virtual CCSize cellSizeForTable (CCTableView *table);
- //以下倆個函數可以覆寫,也可以不覆寫,是從CCTableViewDelegate繼承下來的
- void tableCellHighlight(CCTableView * table,CCTableViewCell * cell);
- void tableCellUnhighlight(CCTableView * table,CCTableViewCell * cell);
- void tableCellTouched(CCTableView * table,CCTableViewCell * cell);
- virtual void tableCellWillRecycle (CCTableView *table, CCTableViewCell *cell);
- //因爲繼承自CCScrollViewDelegate 所以要實現這倆個方法,裏邊一般都不寫東西
- void scrollViewDidScroll(CCScrollView *){};
- void scrollViewDidZoom(CCScrollView *){};
- };
- #include "tableTest.h"
- USING_NS_CC_EXT;
- USING_NS_CC;
- bool tableTest::init()
- {
- if ( !CCLayer::init() )
- {
- return false;
- }
- CCSize size = CCDirector::sharedDirector()->getWinSize();
- /*
- 創建一個豎直方向的tableview
- */
- //初始化的時候第一個參數是CCTableViewDataSource,第二個參數代表tableview的大小
- CCTableView * table = CCTableView::create(this,CCSize(100,320));
- //設置delegate代理
- table->setDelegate(this);
- //設置tableview的滑動的方向
- //kCCScrollViewDirectionHorizontal 水平
- //kCCScrollViewDirectionVertical 豎直
- table->setDirection(kCCScrollViewDirectionVertical);
- //CCTableView默認是以左下角點設置座標位置的,它繼承自CCLayer,這一點不難理解
- table->setPosition(ccp(size.width/5,0));
- table->setDataSource(this);
- this->addChild(table);
- /*
- 創建一個水平方向的tableview
- */
- CCTableView * tableView = CCTableView::create(this,CCSize(size.width/2,50));
- tableView->setDelegate(this);
- tableView->setDirection( kCCScrollViewDirectionHorizontal);
- tableView->setPosition(ccp(size.width/2,size.height/2));
- table->setDataSource(this);
- this->addChild(tableView);
- //這句話一定要加上啊,意思是用現有的配置去刷新所有的cell方法被調用之後,系統會重新執行一遍TableViewDelegate的相關函數,最主要的cellFor***方法,單元格的設置信息會被重新執行一遍。
- tableView->reloadData(); //相當android中adapte.notificydatachange();
- return true;
- }
- //這個函數是用來獲得cell的
- CCTableViewCell * tableTest::tableCellAtIndex(CCTableView * table,unsigned int index)
- {
- CCString * string = CCString::createWithFormat("%d",index+1);
- //獲得一個可用的cell,因爲在我們滑動cell的時候有些cell是顯示的,有些不是顯示出來的,把沒有渲染的cell拿過來
- //這樣就不用重新new出一個cell了,這樣的話可以減小內存的開銷
- CCTableViewCell * cell = table->dequeueCell();
- if(!cell)
- {
- cell = new CCTableViewCell();
- cell->autorelease();
- //添加背景圖片到cell中,便於區分邊界
- CCSprite * background = CCSprite::create("cell.png");
- background->setAnchorPoint(ccp(0,0));
- background->setPosition(CCPointZero);
- cell->addChild(background,0);
- //添加文本信息到cell中
- CCLabelTTF * text = CCLabelTTF::create(string->getCString(),"",20);
- text->setPosition(ccp(25,25));
- text->setTag(1);
- text->setColor(ccc3(255,0,0));
- cell->addChild(text,1);
- //添加精靈到cell的中心位置
- CCSprite * sprite = CCSprite::create("icon.png");
- sprite->setPosition(ccp(50,25));
- cell->addChild(sprite,1);
- }
- //else中獲得是沒有渲染出來的cell,cell中原有的內容還存在
- else
- {
- //改變原來cell中的文本信息
- CCLabelTTF * text = (CCLabelTTF *)cell->getChildByTag(1);
- text->setString(string->getCString());
- }
- return cell;
- }
- //這裏設置每個cell的大小
- CCSize tableTest::tableCellSizeForIndex(CCTableView * table,unsigned int index)
- {
- if(index=3){
- return CCSize(300,50);}
- else{
- return CCSize(100,50);
- }
- }
- //這裏設置一共有多少個cell
- unsigned int tableTest::numberOfCellsInTableView(CCTableView * table)
- {
- return 20;
- }
- //和tableCellSizeForIndex有什麼區別不明白
- cocos2d::CCSize tableTest::cellSizeForTable(CCTableView *table)
- {
- return CCSize(200,50);
- }
- //如果某個cell被點擊了,則會調用此函數
- void tableTest::tableCellHighlight(CCTableView * table,CCTableViewCell * cell)
- {
- CCLog("%d:tableCellHighlight!",cell->getIdx()+1);
- }
- //點擊之後會調用這個函數,觀察這幾個函數的調用順序,發現highlight首先調用
- //unhighlight然後調用,最後是tableCellTouched
- void tableTest::tableCellUnhighlight(CCTableView * table,CCTableViewCell * cell)
- {
- CCLog("%d:tableCellUnhighlight!",cell->getIdx()+1);
- }
- //這裏設置cell被點擊以後的回調函數
- void tableTest::tableCellTouched(CCTableView * table,CCTableViewCell * cell)
- {
- CCLog("%d:tableCellTouched!",cell->getIdx()+1);
- }
- void tableTest::tableCellWillRecycle(CCTableView *table, CCTableViewCell *cell)
- {
- CCLog("%d:tableCellWillRecycle!",cell->getIdx()+1);
- }
- cocos2d::CCScene* tableTest::scene()
- {
- CCScene* scene=CCScene::create();
- scene->addChild(tableTest::create());
- return scene;
- }