ユーザーが uitableview で上下にスクロールすると、セルが破棄されて作成されます。
細胞がいつ破壊されるか、または破壊されたかを検出する方法はありますか?
ユーザーが uitableview で上下にスクロールすると、セルが破棄されて作成されます。
細胞がいつ破壊されるか、または破壊されたかを検出する方法はありますか?
「破壊される」とは、実際に再利用されるセルを参照していると仮定して、派生クラスprepareForReuse
内に実装するだけです。UITableViewCell
再利用の準備
テーブル ビューのデリゲートによる再利用のために、再利用可能なセルを準備します。
- (void)prepareForReuse
討論
UITableViewCell オブジェクトが再利用可能な場合 (つまり、再利用識別子がある場合)、このメソッドは、オブジェクトが UITableView メソッド dequeueReusableCellWithIdentifier: から返される直前に呼び出されます。パフォーマンス上の理由から、アルファ、編集、選択状態など、コンテンツに関連しないセルの属性のみをリセットする必要があります。tableView:cellForRowAtIndexPath: のテーブル ビューのデリゲートは、セルを再利用するときに常にすべてのコンテンツをリセットする必要があります。セル オブジェクトに関連付けられた再利用識別子がない場合、このメソッドは呼び出されません。このメソッドをオーバーライドする場合は、必ずスーパークラスの実装を呼び出す必要があります。
利用可能 iOS 2.0 以降で利用できます。関連項目 – initWithFrame:reuseIdentifier: UITableViewCell.h で宣言された @property reuseIdentifier
適合性やパフォーマンスへの影響には触れずに、別のオプションとして、UITableView クラスの visibleCells メソッドを使用して、どのセルが表示されているかを定期的に確認することもできます。
- (NSArray *)visibleCells
ドキュメントに従って:
UITableViewCell オブジェクトを含む配列を返します。それぞれが受信テーブル ビューの可視セルを表します。
そのメソッドをサブクラス化UITableViewCell
してオーバーライドできますdealloc
。
リソースを節約するためにセルを再利用していると仮定して、それを行う正当な理由はありますか?
上記のように、画面を離れてもセルは破壊されません。ただし、何をしようとしているかに応じて、関連するアクションを追跡するためにできることがいくつかあります。
最初にデリゲート メッセージがあります。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
これは、セルが画面に入る前に呼び出されます。もう 1 つの可能性は、既に述べたセルの prepareForReuse メソッドです。
別のアプローチは次のとおりです。 willMoveToSuperview: またはその他の関連メソッドを試してオーバーライドします。セルが見えなくなった後にこれが起動されるかどうかはわかりませんが、うまくいくかもしれません。
敬具、マイケル
傍受しようとしているのは、UITableView の内部実装の一部であり、セルの管理方法です。このような動作を傍受しようとする方法はありますが、UITableView の将来の実装がこの動作を維持するという保証はないため、それらの使用を避けることをお勧めします。
このような場合は、別のアプローチを検討することをお勧めします。独自のテーブル クラスを設計して実装するか、コード ロジックを変更します。