cocos2d-x的初步學習十一之CCTableView


在這篇文章中,我們將講下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());


}


OK,我們看下效果圖:


一個未選擇狀態,一個選中狀態,注意,tableCellHighlight,tableCellUnhighlight,tableCellTouched的執行先后順序為tableCellHighlight->tableCellUnhighlight->tableCellTouched。OK,就這么簡單,貌似cctableview沒有自帶的滾動條,可能需要自己來實現,希望以后的版本中直接加入滾動條,這樣會更方便~~~




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com