#include <iostream> #include "AbstractTable.h" class PKTable : public AbstractTable { public: PKTable(); ~PKTable(); virtual bool init(); virtual void onEnter(); virtual void onExit(); virtual void scrollViewDidScroll(CCScrollView *view){}; virtual void scrollViewDidZoom(CCScrollView *view){}; virtual CCSize cellSizeForTable(CCTableView *table); virtual CCSize tableCellSizeForIndex(CCTableView *table, unsigned int idx); virtual void tableCellTouched(CCTableView *table, CCTableViewCell *cell); virtual CCTableViewCell *tableCellAtIndex(CCTableView *table, unsigned int idx); virtual unsigned int numberOfCellsInTableView(CCTableView *table); CREATE_FUNC(PKTable); private: int m_nOpenIdx; //记录点击的cell 所在的index bool m_isOpenStatus;// 记录是否已经开启不等高度状态 void onAttack(CCObject *pObj); };
#include "PKTable.h" PKTable::PKTable() { } PKTable::~PKTable() { } bool PKTable::init() { AbstractTable::init(); m_nOpenIdx = -1; m_isOpenStatus = false; return true; } void PKTable::onEnter() { AbstractTable::onEnter(); this->onCreate(CCSize(640, 640)); m_tableView->setPosition(ccp(0, 110)); m_tableView->setVerticalFillOrder(kCCTableViewFillTopDown); m_tableView->setDirection(kCCScrollViewDirectionVertical); m_tableView->reloadData(); } void PKTable::onExit() { AbstractTable::onExit(); } //TODO scroll view delegate adn data sources delegate CCTableViewCell *PKTable::tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx) { CCTableViewCell *pCell = table->cellAtIndex(idx); if (!pCell) { pCell = new CCTableViewCell(); pCell->autorelease(); CCSprite *pBg = NULL; if (m_isOpenStatus && (m_nOpenIdx == idx)) { pBg = CCSprite::create("pk_bg_03.png"); pBg->setPosition(ccp(320, 372/2)); }else { pBg = CCSprite::create("pk_bg_02.png"); pBg->setPosition(ccp(320, 158/2)); } pCell->addChild(pBg, 0); pCell->setTag(idx); } return pCell; } CCSize PKTable::tableCellSizeForIndex(cocos2d::extension::CCTableView *table, unsigned int idx) { if (m_nOpenIdx == idx) { return CCSize(640, 372); } return CCSize(640, 158); } CCSize PKTable::cellSizeForTable(cocos2d::extension::CCTableView *table) { return CCSize(640,158); } unsigned int PKTable::numberOfCellsInTableView(cocos2d::extension::CCTableView *table) { return m_pUser->m_userList->m_users.size(); } void PKTable::tableCellTouched(cocos2d::extension::CCTableView *table, cocos2d::extension::CCTableViewCell *cell) { int touchIdx = cell->getIdx(); if (m_nOpenIdx != touchIdx) { m_isOpenStatus = true; m_nOpenIdx = touchIdx; }else { m_isOpenStatus = false; m_nOpenIdx = -1; } m_tableView->reloadData(); if (touchIdx >= 2) { CCPoint point = m_tableView->getContentOffset(); m_tableView->setContentOffset(ccpAdd(point, ccp(0, 158 * (touchIdx - 1)))); //此处为了保证cell的位置在可见的位置,不被隐藏 } } //TODO menu call void PKTable::onAttack(cocos2d::CCObject *pObj) { }
[cocos2d-x]cctableviewcell 点击实现不同高度,布布扣,bubuko.com
[cocos2d-x]cctableviewcell 点击实现不同高度
原文:http://blog.csdn.net/blucenong/article/details/21226919