iOS - 检测 UITableViewCell 被移出可见 View ?

标签 ios uitableview

一旦单元格在屏幕上不再可见,我就需要得到通知。

UITableView 已经有一个名为 tableView:didEndDisplayingCell:forRowAtIndexPath: 的委托(delegate)方法,但是这个委托(delegate)方法永远不会被调用。是的,我确实有我的 UITableView 集的委托(delegate)。

还有其他检测细胞被移除的方法吗?我需要能够在该单元格被另一项重复使用之前保存该单元格的内容(输入)。

编辑:

根据文档 tableView:didEndDisplayingCell:forRowAtIndexPath: 是 iOS 6 和更高版本的 API。有没有办法在 iOS 5 上实现这一点?

最佳答案

在 6.0 之前的 iOS 版本中,表格 View 不会发送 tableView:didEndDisplayingCell:forRowAtIndexPath: 消息。

如果您使用的是 UITableViewCell 的子类,您可以通过覆盖 didMoveToWindow 在旧版本的 iOS 上获得相同的效果:

- (void)didMoveToWindow {
    if (self.window == nil) {
        // I have been removed from the table view.
    }
}

您可能需要为您的单元格提供一个(弱或不安全的未保留)引用返回到您的 TableView 委托(delegate),以便您可以向委托(delegate)发送消息。

但是,对于所有版本的 iOS,您不能仅依赖于 didMoveToWindow。在 iOS 6 之前,表格 View 总是在重用之前将表格 View 单元格作为 subview 删除,因此单元格在重用之前总是会收到 didMoveToWindow。但是,从 iOS 6 开始,表格 View 可以重用单元格, 无需将其作为 subview 移除。 TableView 将简单地更改单元格的框架以将其移动到新位置。这意味着从 iOS 6 开始,一个单元格在被重用之前不会总是接收到didMoveToWindow

所以你应该在你的单元格子类中实现 didMoveToWindow ,在你的委托(delegate)中实现 tableView:didEndDisplayingCell:forRowAtIndexPath: ,并确保在两者都被调用时它能正常工作,或者如果只调用一个。

关于iOS - 检测 UITableViewCell 被移出可见 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13770903/

相关文章:

ios - 显示结果后关闭 UISearchBar

ios - swift :How can i remove the outlets from code?

ios - Swift 中的 Facebook 登录管理器 "expression is ambiguous"错误

ios - 即使用户很久以前离线,XMPP Last Seen 总是返回 '0' 秒

ios - swift : TableView Cells not getting selected correctly

ios - 从 NSData 到 UIImage 的转换非常慢,阻止 UITableView

ios - UITableViewCell 中的 UIButton 使表格滚动不流畅

ios - 获取 Firebase 中每条消息的个人资料图片的最佳方式

ios - 如何覆盖请求响应中的 HTTP header ?

ios - 在 Swift 中从 Firebase 检索数据