cocos2d-x中的CCTableView的相关用法
当应用中出现列表时,就需要用到CCTableView,具体的用法见下面的代码:
cocos2d::extension::CCTableViewCell * marketContent::tableCellAtIndex(CCTableView *table, unsigned int idx){ CCString *string = CCString::createWithFormat("%d", idx); //CCTableViewCell *cell = table->dequeueCell(); 如果列表子项是可变的,那就用下面的方法,否则,就推荐用这个方法,产生不变大小的子项 CCTableViewCell *cell = table->cellAtIndex(idx); if (!cell) { cell = new CCTableViewCell(); cell->autorelease(); if(type == 1) { //另一个类,产生可变的精灵,其实就是继承自CCSprite,根据点击与否,产生不同大小的列表子项,大的由两张背景图片组成,小的由一张图片组成。 MarketContentSprite *backGround = MarketContentSprite::create(idx, isOpen); cell->addChild(backGround ,1); cell->setTag(idx); backGround->setPosition(ccp(480, 50)); } else { CCSprite *backGround = CCSprite::create("market_item_2.png"); if(idx == 0) { backGround = CCSprite::create("market_item_1.png"); } else if(idx == 5) { backGround = CCSprite::create("market_item_3.png"); } cell->addChild(backGround ,1); backGround->setPosition(ccp(480, 50)); //这里设置不当,也有可能导致列表显示不全等 CCString *string = CCString::createWithFormat("market_chipsLogo%d.png",idx); CCSprite *moneyLogo = CCSprite::create(string->getCString()); backGround->addChild(moneyLogo); moneyLogo->setPosition(ccp(120, 50)); CCSprite *normSprite = CCSprite::create("btn_market_buy_pre.png"); CCLabelTTF *buyttf = CCLabelTTF::create("buy now", "", 22); buyttf->setPosition(ccp(70, 30)); normSprite->addChild(buyttf); CCSprite *selectedSprite = CCSprite::create("btn_market_buy.png"); buyttf = CCLabelTTF::create("buy now", "", 29); buyttf->setPosition(ccp(70, 30)); selectedSprite->addChild(buyttf); //设置不同的字体,从而使点击时,看到变大的字体 CCMenuItemSprite *buysprite = CCMenuItemSprite::create(normSprite, selectedSprite, NULL, this, menu_selector(marketContent::buyNow)); CCMenu *buyMenu = CCMenu::create(buysprite,NULL); backGround->addChild(buyMenu,1); buyMenu->setPosition(ccp(600, 50)); } CCLabelTTF *label = CCLabelTTF::create(string->getCString(), "Helvetica", 20.0); label->setPosition(CCPointZero); label->setTag(123); cell->addChild(label); } else { CCLabelTTF *label = (CCLabelTTF*)cell->getChildByTag(123); label->setString(string->getCString()); } return cell; }unsigned int marketContent::numberOfCellsInTableView(cocos2d::extension::CCTableView *table){ if(type == 1) { return 4; } else { return 6; } }CCSize marketContent::cellSizeForTable(cocos2d::extension::CCTableView *table){ return CCSizeMake(960, 102);}CCSize marketContent::tableCellSizeForIndex(cocos2d::extension::CCTableView *table, unsigned int idx){ if(type == 1) { if(idx == isOpen - 1) //根据不同的状态,返会不同的子项的宽度 { return CCSizeMake(960, 264); } else { return CCSizeMake(960, 102); } } else { return CCSizeMake(960, 102); } }void marketContent::scrollViewDidScroll(cocos2d::extension::CCScrollView *view){ }void marketContent::scrollViewDidZoom(cocos2d::extension::CCScrollView *view){ }void marketContent::tableCellTouched(CCTableView *table, cocos2d::extension::CCTableViewCell *cell){ int idx = cell->getIdx(); if(type == 1) { if(idx == isOpen -1) //处理触摸事件,更改显示状态 { isOpen = 0; lastOpen = 0; pTableView->reloadData(); return; } idx = cell->getIdx(); isOpen = idx +1; lastOpen = isOpen; pTableView->reloadData(); if(isOpen == 4) { pTableView->setContentOffset(pTableView->maxContainerOffset()); //如果是最后一个的话,列表向上弹到最大位置 } } CCLog("%d",idx);}void marketContent::buyNow(cocos2d::CCObject *pSender){ // 获得点击列表的子项,确定点击的按钮 CCTableViewCell *tablecell = (CCTableViewCell *)(((CCMenu *)pSender)->getParent()->getParent()->getParent()); CCLog("hhh %d",tablecell->getIdx());}