Cocos2d-x中CCTableView关于点击空白区域依然会响应单元格事件

在CCTableView中点击空白区域依然会响应单元格事件,

在CCTableView.cpp中修改

从点击坐标计算点击单元格的时候,原有的 _indexFromOffset自动把返回的值重定到0~size-1范围内,所以无论点到控件内部的任何位置都会弹出一个单元格事件。

改法是:

1.增加一个方法:(原有的方法的另一个bug是-cell_size~0的范围和0~cell_size算出来的index都是0)

int CCTableView::indexOfTouch(CCPoint offset){

    const CCSize cellSize = m_pDataSource->cellSizeForTable(this);

    if (m_eVordering == kCCTableViewFillTopDown) {

        offset.y = this->getContainer()->getContentSize().height- offset.y - cellSize.height;

    }

    int  index = 0;

    float __index =0.0;

    switch (this->getDirection()) {

        case kCCScrollViewDirectionHorizontal:

            __index = offset.x/cellSize.width;

            if (__index<0) __index-=1;

            index = __index;

            break;

        default:

            __index = offset.y/cellSize.height;

            if (__index<0) __index-=1;

            index = __index;

            break;

    }

    return index;

}


2. 修改

bool CCTableView::ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent)


index = this->_indexFromOffset(point);        改为=>      index = this->indexOfTouch(point);



二:


2014.08.05改的一种新方法:

    //int __indexFromOffset(CCPoint offset);//默认的方法

    //unsigned int _indexFromOffset(CCPoint offset);

    //modif on 20140805 解决CCTableView 点击空白单元格依然会响应的问题

    //增加了isTouchBegan判断,true时表明是在TouchBegan中调用,此时index返回-1(默认返回的00表示返回的是第一个单元格,但我们在这里需要返回-1表示无效)

    int __indexFromOffset(CCPoint offset, bool isTouchBegan);

    unsigned int _indexFromOffset(CCPoint offset, bool isTouchBegan);


主要是修改下面的地方:


int CCTableView::__indexFromOffset(CCPoint offset, bool isTouchBegan)

{

    //...以上都相同


    if (low <= 0 && isTouchBegan == false) {//modif on 20140805 在这里判断点击时不返回0,点击空白时直接返回-1

        return 0;

    }


    return -1;

}


然后在onTouchBegan中修改:

bool CCTableView::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

index = this->_indexFromOffset(point, true);//这里将第二个参数填入true

}


在其它地方调用 _indexFromOffset 的方法时 传入false 来判断就OK啦。




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值