tableView:didEndDisplayingCell:forRowAtIndexPath:
6.0 より古いバージョンの iOS では、テーブル ビューはメッセージを送信しません。
のサブクラスを使用している場合は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:
デリゲートの両方に実装し、両方が呼び出された場合、または 1 つだけが呼び出された場合に機能することを確認する必要があります。