[cocos2d-x]cctableviewcell 点击实现不同高度

#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)
{
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值