CCTableView用法总结

近段时间,由于项目需要做一个任务列表,于是就想到了CCScrollView和CCTableView,因为之前没怎么接触过CCTableView,于是就想顺便学习一下,最主要的是这里用到CCTableView比用CCScrollView更合适,还是先贴上我的代码,再发感慨吧!

CCTableViewCell* CCPlayAndFriendLayer::tableCellAtIndex(cocos2d::extension::CCTableView *table, unsigned int idx)
{
    //CCTableViewCell *cell = table->dequeueCell();    
    CCTableViewCell *cell = table->cellAtIndex(idx);
    
    char buf[32];
    if (idx > m_num) {
        return NULL;
    }
    
    if (!cell) {
        cell = new CCTableViewCell();
        cell->autorelease();
        CCSprite* bg = CCSprite::createWithSpriteFrameName("bg.png");
        bg->setPosition(CCPointZero);
        bg->setAnchorPoint(CCPointZero);
        cell->addChild(bg);
        
        sprintf(buf, "%d.png", idx + 1);
        CCSprite *img = CCSprite::createWithSpriteFrameName(buf);
        img->setPosition(CCPointZero);
        img->setAnchorPoint(CCPointZero);
        img->setTag(123);
        cell->addChild(img);
        
        CCSprite* normal = CCSprite::createWithSpriteFrameName("Btn.png");
        CCSprite* select = CCSprite::createWithSpriteFrameName("Btn.png");
        select->setColor(ccc3_selectColor);
        CCMenuItemSprite* invitationItem = CCMenuItemSprite::create(normal, select, this, menu_selector(CCPlayAndFriendLayer::menuCallBack));
        CCMenu* pMenu = CCMenu::create(invitationItem, NULL);
        cell->addChild(pMenu);
        pMenu->setPosition(bg->getContentSize().width - normal->getContentSize().width - 10, normal->getContentSize().height);

        CCLabelTTF* word = CCLabelTTF::create(buf, "Arial", 24);
        invitationItem->addChild(word);
        word->setPosition(ccp(normal->getContentSize().width / 2, normal->getContentSize().height / 2));
    }
    else
    {   sprintf(buf, "midlevel_%d.png", idx + 1);
        CCTexture2D* pTexture = CCTextureCache::sharedTextureCache()->addImage(buf);
        CCSprite *img = (CCSprite*)getChildByTag(123);
        if (img) {
            img->setTexture(pTexture);
        }
    }
    return cell;
}

 
 

//片段1
        sprintf(buf, "%d.png", idx + 1);
        CCTexture2D* pTexture = CCTextureCache::sharedTextureCache()->addImage(buf);
        CCSprite *img = (CCSprite*)getChildByTag(idx + 1);
        img->setTexture(pTexture);
        img->setPosition(CCPointZero);
        img->setScale(0.85f);
        img->setAnchorPoint(CCPointZero);
        img->setTag(123);
        cell->addChild(img);

 下面就来说说遇到的问题,起初我也不太会用这个控件,后来根据网上的资料写了一个例子,但是用的时候发现有cell的顺序错乱和重复出现的问题。然后就不停的找原因,终于发现原来是我用错了, 
如果列表子项是可变的,那就用下面的方法,table->cellAtIndex(idx)
<pre name="code" class="cpp">否则,就推荐用这个方法,产生不变大小的子项 table->dequeueCell()

也有人如片段1中所示这么用,让程序每次都重新创建cell,不过这样效率不高,不建议这么做





 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值