CCTableView定位到指定行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tyxkzzf/article/details/41576901

Cocos2d-x提供了CCTableView类,用于创建列表,那么如何定位到列表指定的行呢;

CCTableView继承自CCScrollView,打开CCScrollView会发现有个setContentOffset方法;

该方法即用于设定列表的位置。参数offset指定列表停放的位置,animated如果为true则以MoveTo滚动的方式延迟到达指定offset,如果为false,则直接setPostion到offset;

如果在初始化的时候使用setContentOffset定位到列表某行,则需将setContentOffset放在reloadData()之后;

那么问题来了,如何定位offset呢?引擎没有提供相应的接口,我们只能自己计算(这里只计算offsety,offsetx=0):

/*
     viewHeight:可视区域的高度
     cellHeight:单个cell的高度
     cellCount:cell的总数
     cellCountShown:可视区域可显示的cell的数量
     cellIndex:需要指定的cell的索引,从0开始计数
     locationindex:需要将cellIndex放到可视区域的第几个,从1开始
     */
float calculateTableCellOffsetByCellIdx(float viewHeight, float cellHeight, int cellCount, int cellCountShown, int cellIndex, int locationindex) {
    float tableTotalHeight = cellHeight * cellCount;
    if(tableTotalHeight > viewHeight) {
        return 0.00 - (cellCount - (cellIndex + cellCountShown - locationindex + 1)) * cellHeight;
    }
    else{
        return viewHeight - tableTotalHeight;
    }
}
如果我们有一个有15个元素的TableView,一屏可以显示5个,我们要将第3个元素定位到第二行的位置,那么我们可以这样计算offsety:

float offsety = calculateTableCellOffsetByCellIdx(TableView->getViewSize().height, cellSize.height, 15, 5, 3, 2);
TableView->setContentOffset( ccp(0, offsety), false);
注意:

1、获取TableView的ViewSize而不是Contentsize;

2、setContentsizeOffset必须在reloadData()之后调用;


展开阅读全文

没有更多推荐了,返回首页