CCTableView定位到指定行

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值