在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(默认返回的0,0表示返回的是第一个单元格,但我们在这里需要返回-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啦。