CCTableView
今天用到TableView, 我就来记录一下....这些都是在网上找到了资料
//首先 继承 :
public cocos2d::extension::CCTableViewDelegate,
public cocos2d::extension::CCTableViewDataSource
//CCTableViewDelegate继承自CCScrollViewDelegate 方法可以空着,但一定要写
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view);
//下面TableView所用到的方法
//点击哪个cell 调用的方法 点击方法调用顺序( Highlight -> Unhighlight -> Touched )
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);
//接下来是实现,首先创建TableView CCSize visibSize=CCDirector::sharedDirector()->getVisibleSize(); //传入自己,后面的size是TableView显示的大小 CCTableView *tableView=CCTableView::create(this, CCSizeMake(visibSize.width, visibSize.height)); //横向还是竖向 ( kCCScrollViewDirectionVertical 竖向 ; kCCScrollViewDirectionHorizontal 横向 ) tableView->setDirection(kCCScrollViewDirectionVertical); tableView->setPosition(CCPointZero); tableView->setDelegate(this); //call的id顺序 (kCCTableViewFillTopDown 从上到下 ; kCCTableViewFillBottomUp 从下到上) tableView->setVerticalFillOrder(kCCTableViewFillTopDown); //是否开启回弹 默认开启 tableView->setBounceable(true); this->addChild(tableView,1); tableView->reloadData();
unsigned int HelloWorld::numberOfCellsInTableView(CCTableView *table) { return 10; //显示10行 }
int m_iNodeTag = 1000; // Tag值 CCTableViewCell* HelloWorld::tableCellAtIndex(CCTableView *table, unsigned int idx) { CCLOG("%d",idx); //idx 就是每个cell的下标,获取到下标就能知道点击的是那个call //当cell在屏幕外面时, 就被放入dequeueCell() 中 CCTableViewCell *cell = table->dequeueCell(); CCSprite *mSprite; if (!cell) { //如果没有就创建... cell = new CCTableViewCell(); cell->autorelease(); mSprite= CCSprite::create("cell.png"); mSprite->setAnchorPoint(CCPointZero); mSprite->setTag(m_iNodeTag); mSprite->setPosition(ccp(0, 0)); cell->addChild(mSprite); CCLabelTTF *label = CCLabelTTF::create(string->getCString(), "Helvetica", 20.0); label->setPosition(CCPointZero); label->setAnchorPoint(CCPointZero); label->setTag(123); cell->addChild(label); } else { //如果有了就获取tag值 mSprite = dynamic_cast<CCSprite *>(call->getChildByTag( iNodeTag )); CCLabelTTF *label = (CCLabelTTF*)cell->getChildByTag(123); label->setString(string->getCString()); } //在这里写一个接口...改变各个cell return cell; }
CCSize CActivityLayer::cellSizeForTable(CCTableView *table) { //返回的是每一个cell 的size return CCSizeMake(m_pActivityView->getContentSize().width, 80); }
ps:剩下没写的函数..我这写的是空....有需求的看着上面的函数声明来写