iOS UITableView获取特定位置的cell
点击上方“iOS开发”,选择“置顶公众号”
关键时刻,第一时间送达!
一、tableView双级联动

菜单栏联动.gif

UITableView双级联动.gif
以上两种效果比较类似,实现的关键在于都是需要获得在滑动过程中滑动到tableView顶部的cell的indexPath。
方案一:获得当前可见的所有cell,然后取可见cell数组中的第一个cell就是目标cell,再根据cell获得indexPath。代码如下
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView == _rightTableView && _isSelected == NO) {
//返回tableView可见的cell数组
NSArray * array = [_rightTableView visibleCells];
//返回cell的IndexPath
NSIndexPath * indexPath = [_rightTableView indexPathForCell:array.firstObject];
NSLog(@"滑到了第 %ld 组 %ld个",indexPath.section, indexPath.row);
_currentIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
[_leftTableView reloadData];
[_leftTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:indexPath.section] atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
}
}
方案二(推荐使用):利用偏移量!偏移量的值实际上可以代表当时处于tableView顶部的cell在tableView上的相对位置, 那么我们就可以根据偏移量获得处于顶部的cell的indexPath。代码如下
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if (scrollView == _rightTableView && _isSelected == NO) {
//系统方法返回处于tableView某坐标处的cell的indexPath
NSIndexPath * indexPath = [_rightTableView indexPathForRowAtPoint:scrollView.contentOffset];
NSLog(@"滑到了第 %ld 组 %ld个",indexPath.section, indexPath.row);
_currentIndexPath = [NSIndexPath indexPathForRow:0 inSection:indexPath.section];
[_leftTableView reloadData];
[_leftTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:indexPath.section] atScrollPosition:UITableViewScrollPositionMiddle animated:NO];
}
}
二、 获取处于UITableView中心的cell

获取UITableView中心线cell.gif
获取处于tableView中间cell的效果,用上述方案一比较麻烦:要考虑可见cell 的奇、偶个数问题,还有cell是否等高的情况;方案二用起来就快捷方便多了,取的cell的位置的纵坐标相当于在偏移量的基础上又增加了tableView高度的一半。代码如下:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//获取处于UITableView中心的cell
//系统方法返回处于tableView某坐标处的cell的indexPath
NSIndexPath * middleIndexPath = [_rightTableView indexPathForRowAtPoint:CGPointMake(0, scrollView.contentOffset.y + _rightTableView.frame.size.height/2)];
NSLog(@"中间的cell:第 %ld 组 %ld个",middleIndexPath.section, middleIndexPath.row);
}
需要示例Demo的话请移驾我的Github→UITableViewLinkage
https://github.com/wslcmk/UITableViewLinkage.git
俺目前能想到的也就这了,各位同僚有什么好的想法欢迎在此留言交流

作者:且行且珍惜_ios
https://www.jianshu.com/p/70cdcdcb6764
iOS开发整理发布,转载请联系作者获得授权
关注公众号:拾黑(shiheibook)了解更多
[广告]赞助链接:
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号随时掌握互联网精彩
- 1 中法元首相会都江堰 7904297
- 2 中方不接受日方所谓交涉 已当场驳回 7808223
- 3 大闸蟹为何会在欧美泛滥成灾 7714152
- 4 国际机构看中国经济 关键词亮了 7619414
- 5 家长称婴儿被褥印不雅英文单词 7520570
- 6 日方军机滋扰擅闯或被视为训练靶标 7424171
- 7 罪犯被判死缓破口大骂被害人一家 7329537
- 8 国乒8比1击败日本队 11战全胜夺冠 7238333
- 9 长沙一男子要取现20万 银行紧急报警 7139809
- 10 千吨级“巨无霸”就位 7039741











iOS开发
