• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 当单元格不可见时,UITableView indexPathForCell 返回 null

[复制链接]
菜鸟教程小白 发表于 2022-12-13 01:42:51 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一个 UITableView 有很多高行(一次只能在屏幕上显示 2-3 行),当特定 View 添加到 UITableViewCell 层次结构时,还有一些代码以编程方式滚动到特定行。如果目标行在屏幕上可见,indexPathForCell 返回正确的 NSIndexPath。如果用户必须向下滚动才能看到目标行,则返回的 NSIndexPath 为空。

代码如下:

-(void)scrollToLastSelection {
    if ((firstLabel) && (secondLabel)) {                
        UITableViewCell *targetCell = [self getTableViewCellFromSubview:secondLabel];
        NSIndexPath *targetCellIndexPath = [myTableView indexPathForCell:targetCell];
        CGRect targetCellRect = [myTableView rectForRowAtIndexPath:targetCellIndexPath];

        NSLog(@"------ secondLabelCell: %@", targetCell);
        NSLog(@"------ secondIndexPath: %@", targetCellIndexPath);            

        [myTableView scrollToRowAtIndexPath:targetCellIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
    }
}

- (UITableViewCell *) getTableViewCellFromSubviewUIView*)subview {
    UITableViewCell* tableViewCell = nil;    
    while (subview.superview != Nil) {
        if ([subview.superview isKindOfClass:[UITableViewCell class]]) {
            tableViewCell = (UITableViewCell*)subview.superview;
            break;
        } else {
            subview = subview.superview;
        }
    }    
    return tableViewCell;
}

这是 NSLog 的输出:

------ secondLabelCell: <UITableViewCell: 0x947c8f0; frame = (0 120; 320 10); hidden = YES; autoresize = W; layer = <CALayer: 0x947ca80>>
------ secondIndexPath: (null)

有谁知道获取隐藏的 UITableCell 的正确 NSIndexPath 的方法吗?或者滚动到隐藏的 UITableViewCell?

提前致谢!

更新:我在一些测试中发现,如果我滚动到(或过去)目标单元格(因此它会在某个点呈现在屏幕上),并且从原始位置(所以目标单元格再次离开屏幕),以下工作(感谢@Deepan):

UITableViewCell *targetCell = [self getTableViewCellFromSubview:secondLabel];
NSIndexPath *indexPathFromCellCenter = [self.myTableView indexPathForRowAtPoint:targetCell.center];
[myTableView scrollToRowAtIndexPath:indexPathFromCellCenter atScrollPosition:UITableViewScrollPositionTop animated:NO];

还有其他想法吗?



Best Answer-推荐答案


您的问题似乎与以下问题类似,根据接受的答案,您可以考虑使用 indexPathForRowAtPoint 方法来获取索引。

tableView:indexPathForCell returns nil

关于ios - 当单元格不可见时,UITableView indexPathForCell 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732116/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap