CCTableView使用并解决乱序

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 highlight
virtual 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 Menu
CCMenuItemFont *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();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值