在 6.0 之前的 iOS 版本上,表格视图不会发送tableView:didEndDisplayingCell:forRowAtIndexPath:
消息。
如果您使用 的子类UITableViewCell
,则可以通过覆盖在旧版本的 iOS 上获得相同的效果didMoveToWindow
:
- (void)didMoveToWindow {
if (self.window == nil) {
// I have been removed from the table view.
}
}
您可能需要给您的单元格一个(弱或 unsafe_unretained)引用返回到您的表视图委托,以便您可以向委托发送消息。
但是,您不能只依赖didMoveToWindow
于所有版本的 iOS。在 iOS 6 之前,表格视图总是在重用之前将表格视图单元格作为子视图移除,因此单元格didMoveToWindow
在被重用之前总是会接收。但是,从 iOS 6 开始,表格视图可以重用单元格,而无需将其作为子视图移除。表格视图将简单地更改单元格的框架以将其移动到新位置。这意味着从 iOS 6 开始,一个单元格在被重用之前并不总是接收。didMoveToWindow
因此,您应该didMoveToWindow
在您的单元子类和tableView:didEndDisplayingCell:forRowAtIndexPath:
您的委托中实现这两者,并确保如果两者都被调用,或者只有一个被调用,则它可以工作。