CCTableView定位到指定行

来源:互联网 发布:上海师范大学网络教育 编辑:程序博客网 时间:2024/04/30 11:35

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()之后调用;


0 0
原创粉丝点击