2011-11-08 38 views
23

我有一个UITableView和一些UITableViewCells我通过Interface Builder手动创建。我已经为每个单元分配了一个outlet,并将它们连接到方法CellForRowAtIndexPath中的UITableView。在这种方法中,我使用switch(case)方法使特定的单元格出现在UITableView中,取决于具体情况。检查一个特定的UITableViewCell是否在UITableView中可见

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

谢谢:)

回答

74

注意,您可以如用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(并且不需要实际的细胞)可能是便宜

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

+3

在大多数情况下,此解决方案比可接受的解决方案更好。 – Envil

+0

这个作品完美!谢谢:) – Gaurav

11

可以使用的UITableView方法:

[tableView indexPathForCell:aCell]; 

如果电池不在的tableView将返回零存在。否则,您将获得单元格的NSIndexPath。

+1

那是工作的,谢谢:) – ozking

+4

重用 –

+0

谢谢细胞时,这是不行的,它的工作原理+1 – iLearner

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

这是假设你有一个包含电池,你有兴趣,我觉得你的问题做一个单独的实例变量,但目前尚不清楚。

+0

谢谢,这是实施Sorig给我的解决方案的另一种方式:) – ozking

+0

这是原始问题的正确答案,如果单元格可见。感谢您提供干净简单的答案。 –

0

为此,您可以在斯威夫特3,以检查是否UITableViewCell可见:

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

if tableView.visibleCells.contains(cell) { 
    // the cell is visible 
} 
相关问题