我有一个 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];
还有其他想法吗?
您的问题似乎与以下问题类似,根据接受的答案,您可以考虑使用 indexPathForRowAtPoint 方法来获取索引。
tableView:indexPathForCell returns nil
关于ios - 当单元格不可见时,UITableView indexPathForCell 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25732116/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |