CCTableView使用并解决乱序

来源:互联网 发布:编程语言最新排名 编辑:程序博客网 时间:2024/04/28 17:03

cctableview继承于CCScrollView和CCScrollViewDelegate,用于显示等宽高的元素.并支持滚动

test中的例子抽出来如下,并作修改,官方给的例子在拖拽之后会出现乱序


class TableViewTestLayer : public cocos2d::CCLayer, public cocos2d::extension::CCTableViewDataSource, public cocos2d::extension::CCTableViewDelegate{public:virtual void onEnter();virtual void onExit();    virtual bool init();     void toExtensionsMainLayer(CCObject *sender);    CREATE_FUNC(TableViewTestLayer);        virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);  // 此函数不需要调用父类的函数,因为它是单独被调用的,当控件发生滚动时会发生,reloaddata也会发生。    virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}    virtual void tableCellTouched(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell);    virtual cocos2d::CCSize cellSizeForTable(cocos2d::extension::CCTableView *table);  // 返回每个元素的大小    virtual cocos2d::extension::CCTableViewCell* tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx); //     virtual unsigned int numberOfCellsInTableView(cocos2d::extension::CCTableView *table);   // 返回此tableview中有多少个元素// when touching on the cell, it will highlightvirtual void tableCellHighlight(cocos2d::extension::CCTableView* table, cocos2d::extension::CCTableViewCell* cell); virtual void tableCellUnhighlight(cocos2d::extension::CCTableView *table, cocos2d::extension::CCTableViewCell *cell);};class CustomTableViewCell : public cocos2d::extension::CCTableViewCell{public:virtual void draw();};bool TableViewTestLayer::init(){    if ( !CCLayer::init() )    {        return false;    }CCSize winSize = CCDirector::sharedDirector()->getWinSize();   CCTableView* tableView = CCTableView::create(this, CCSizeMake(320, 30));    tableView->setDirection(kCCScrollViewDirectionHorizontal);    tableView->setPosition(ccp(20,winSize.height/2-30));    tableView->setDelegate(this);//this->addChild(tableView);tableView->reloadData();tableView = CCTableView::create(this, CCSizeMake(60, 200));tableView->setDirection(kCCScrollViewDirectionVertical);//tableView->setPosition(ccp(winSize.width-150,winSize.height/2-120));tableView->setPosition(ccp(0 ,80));tableView->setDelegate(this);tableView->setVerticalFillOrder(kCCTableViewFillTopDown);this->addChild(tableView);tableView->reloadData();// Back MenuCCMenuItemFont *itemBack = CCMenuItemFont::create("Back", this, menu_selector(TableViewTestLayer::toExtensionsMainLayer));itemBack->setPosition(ccp(50,  25));CCMenu *menuBack = CCMenu::create(itemBack, NULL);menuBack->setPosition(CCPointZero);addChild(menuBack);    return true;}void TableViewTestLayer::toExtensionsMainLayer(cocos2d::CCObject *sender){}void TableViewTestLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell){    CCLOG("cell touched at index: %i", cell->getIdx());}CCSize TableViewTestLayer::cellSizeForTable(CCTableView *table){    return CCSizeMake(60, 60);//return CCSizeMake(480, 320);}CCTableViewCell* TableViewTestLayer::tableCellAtIndex(CCTableView *table, unsigned int idx){CCLOG("tableCellAtIndex at index: %i", idx);    CCString *string = CCString::createWithFormat("%d", idx);    CCTableViewCell *cell = table->dequeueCell();    if (!cell) {        cell = new CustomTableViewCell();        cell->autorelease();    }    else    {cell->removeAllChildrenWithCleanup(true);   // 乱序在这里解决    }CCSprite *sprite = CCSprite::create("Icon.png");sprite->setAnchorPoint(ccp(0, 0));sprite->setPosition(ccp(0, 0));sprite->setTag(789);cell->addChild(sprite);CCLabelTTF *label = CCLabelTTF::create(string->getCString(), "Helvetica", 20.0);label->setPosition(CCPointZero);label->setAnchorPoint(CCPointZero);label->setTag(123);cell->addChild(label);    return cell;}// 当前元素被选中的时候高亮显示void TableViewTestLayer::tableCellHighlight(CCTableView *table, CCTableViewCell *cell)  {  CCLOG(">>>>>>>>>>>>>>>>>>>>>>>>>tableCellHighlight<<<<<<<<<<<<<<<<<<<<");  //CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("HelloWorld.png");  CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);  pSprite->setColor(ccc3(120, 120, 120));}  void TableViewTestLayer::onEnter(){CCLayer::onEnter();}void TableViewTestLayer::onExit(){//CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);CCLayer::onExit();}// 取消元素高度显示void TableViewTestLayer::tableCellUnhighlight(CCTableView *table, CCTableViewCell *cell)  {  CCLOG(">>>>>>>>>>>>>>>>>>>>>>>>>tableCellUnhighlight<<<<<<<<<<<<<<<<<<<<");  CCTexture2D *aTexture=CCTextureCache::sharedTextureCache()->addImage("Icon.png");  CCSprite *pSprite=(CCSprite *)cell->getChildByTag(789);  pSprite->setColor(ccc3(255, 255, 255));}  unsigned int TableViewTestLayer::numberOfCellsInTableView(CCTableView *table){    return 20;}void TableViewTestLayer::scrollViewDidScroll(cocos2d::extension::CCScrollView* view){CCLOG("---> scrollViewDidScroll <--");}void CustomTableViewCell::draw(){CCTableViewCell::draw();}


原创粉丝点击