检查UITableView中是否显示特定的UITableViewCell

时间:2011-11-08 15:39:27

标签: iphone objective-c ios xcode uitableview

我有一个UITableView和一些UITableViewCells,我是通过 Interface Builder 手动创建的。我已为每个单元格分配了outlet,并将其连接到UITableView方法中的CellForRowAtIndexPath。在此方法中,我使用switch(case)方法使特定单元格显示在UITableView中,具体取决于具体情况。

现在,我想找到一个特定的单元格并检查它是否存在于UITableView中。我使用方法:UITableView.visibleCells来获取表视图中的单元格数组。我的问题是 - 如何检查数组中是否存在特定的单元格?我能以某种方式使用我分配给它的插座吗? - (最佳解决方案),或者,我可以使用标识符吗?

谢谢:)

5 个答案:

答案 0 :(得分:76)

请注意,您也可以这样使用indexPathsForVisibleRows

    NSUInteger index = [_people indexOfObject:person];
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:0];
    if ([self.tableView.indexPathsForVisibleRows containsObject:indexPath]) {
      [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] 
                            withRowAnimation:UITableViewRowAnimationFade];
    }

如果你有indexPath(并且不需要实际的Cell),它可能更便宜

PS:_peopleNSArray在这种情况下用作我的后端。

答案 1 :(得分:17)

if ([tableView.visibleCells containsObject:myCell])
{
    // Do your thing
}

这假设您有一个单独的实例变量,其中包含您感兴趣的单元格,我想您是从问题中做到的,但目前尚不清楚。

答案 2 :(得分:11)

您可以使用UITableView方法:

[tableView indexPathForCell:aCell];

如果tableView中不存在该单元格,则返回nil。否则,您将获得单元格的NSIndexPath。

答案 3 :(得分:1)

您可以在Swift 3中执行此操作以检查UITableViewCell是否可见:

let indexPathToVerify = IndexPath(row: 0, section: 0)
let cell = tableView.cellForRow(at: indexPathToVerify)

if tableView.visibleCells.contains(cell) {
    // the cell is visible
}

答案 4 :(得分:0)

自iOS 7起,indexPathForVisibleRows将在半透明导航栏下方包含一行,因此您现在需要执行以下操作:

[self.tableView indexPathsForRowsInRect:self.tableView.safeAreaLayoutGuide.layoutFrame]