iOS UITableView获取特定位置的cell

一、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

俺目前能想到的也就这了,各位同僚有什么好的想法欢迎在此留言交流??????

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏君赏技术博客

托管UITableView多样式cell的第三方库ZHTableViewGroup

之前遇到过很多复杂的UITableView的结构,里面包含了很多复杂的cell,甚至一个Section包含很多种类的cell。通常在代理

1571
来自专栏技术之路

【swift学习笔记】三.使用xib自定义UITableViewCell

使用xib自定义tableviewCell看一下效果图 ? 1.自定义列 新建一个xib文件 carTblCell,拖放一个UITableViewCell,再拖...

2247
来自专栏TechBox

iOS开发之UICollectionViewController系列(二) :详解CollectionView各种回调

2554
来自专栏一“技”之长

iOS使用UIImagePickerController调用系统相机、相册与图库

        UIImagePickerController是系统封装好的一个导航视图控制器,使用其开发者可以十分方便的进行相机相册相关功能的调用。UIIma...

2691
来自专栏iOS开发攻城狮的集散地

iOS UITableView获取特定位置的cell

3448
来自专栏LinXunFeng的专栏

iOS - 解决tableHeaderView添加searchBar后出现的问题

1122
来自专栏GIS讲堂

Arcgis for JS实现台风运动路径与影像范围的显示

4012
来自专栏一“技”之长

iOS UITableView代理方法详解 原

在上一篇博客中,http://my.oschina.net/u/2340880/blog/404605,我将IOS中tableView(表视图)的一些常用方法总...

1074
来自专栏移动端开发

Swift 2.0 自定义cell和不同风格的cell

      昨天我们写了使用系统的cell怎样创建tableView,今天我们再细分一下,就是不同风格的cell,我们怎写代码。先自己创建一个cell,继承于U...

1966
来自专栏我杨某人的青春满是悔恨

教你写个多表视图

如图所示的多表视图是一个很常用的东西,之前我是用UIScrollView和UITableViewController做的。把当前的控制器作为一个父控制器,添加三...

1813

扫码关注云+社区

领取腾讯云代金券