检测UITableViewCell何时离开屏幕

27 iphone uitableview

我正在用自定义创建的UITableViewCell实现一个丰富的UITableView,我以一种方式在屏幕上显示这些,但是一旦它们离开屏幕我想记下这一点,因为他们第二次出现我希望他们以不同的方式显示.离开屏幕时想想自动"标记为已读".

我一直在寻找一些方法来检测一个单元格何时离开屏幕(得到dealloc'ed或者出列或者等效),最好是在:UITableViewController类中快速记下[indexPath行],但是在: UITableViewCell同样出色.

我无法以任何标准方式执行此操作...计算它出现的时间似乎是不可能的,因为我在表上执行了多次reloadData调用.

任何想法?这看起来有点棘手:)

Mr.*_*. T 67

这是一个老问题,但是如果有人在寻找,在iOS6中,引入了一个新的UITableViewDelegate函数:

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

它可以很好地告诉你何时删除一个单元格,但是,它是非常彻底的,因此如果你做了一个重载单元,即使被替换的旧单元格也会触发这个委托函数.在我的实现中,我只是检查indexPath传递是否仍然在数组中tableView.indexPathsForVisibleRows.就像是:

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ([tableView.indexPathsForVisibleRows indexOfObject:indexPath] == NSNotFound)
    {
        // This indeed is an indexPath no longer visible
        // Do something to this non-visible cell...
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 遗憾的是,tableE.indexPathsForVisibleRows直到didEndDisplayingCell被调用之后才会更新,因此如果添加新单元格将变为可见,旧单元格将从显示中删除但仍将在tableView.indexPathsForVisibleRows中.(至少对于iOS 7而言). (3认同)

h4x*_*xxr 6

我想你可以使用

- (NSArray *)visibleCells
Run Code Online (Sandbox Code Playgroud)

UITableView的方法.这将返回所有可见单元格的数组.然后,您可以按照您希望的方式标记"不可见"(即不在此数组中)的任何数据,这样当您向后滚动它时,它已被更新.

希望有所帮助


小智 6

一旦UITableViewCell不可见,它将被删除UITableView.您可以覆盖该方法-(void)removeFromSuperView,并在该方法中执行某些操作.最后,别忘了打电话[super removeFromSuperView].


Chr*_*die 0

我想我会尝试定期检查 UITableView 的 indexPathsForVisibleRows 属性。从最大的索引路径,您可以推断出所有先前的行都已滚动过去。