2

ユーザーが uitableview で上下にスクロールすると、セルが破棄されて作成されます。

細胞がいつ破壊されるか、または破壊されたかを検出する方法はありますか?

4

5 に答える 5

12

「破壊される」とは、実際に再利用されるセルを参照していると仮定して、派生クラスprepareForReuse内に実装するだけです。UITableViewCell

再利用の準備

テーブル ビューのデリゲートによる再利用のために、再利用可能なセルを準備します。

- (void)prepareForReuse

討論

UITableViewCell オブジェクトが再利用可能な場合 (つまり、再利用識別子がある場合)、このメソッドは、オブジェクトが UITableView メソッド dequeueReusableCellWithIdentifier: から返される直前に呼び出されます。パフォーマンス上の理由から、アルファ、編集、選択状態など、コンテンツに関連しないセルの属性のみをリセットする必要があります。tableView:cellForRowAtIndexPath: のテーブル ビューのデリゲートは、セルを再利用するときに常にすべてのコンテンツをリセットする必要があります。セル オブジェクトに関連付けられた再利用識別子がない場合、このメソッドは呼び出されません。このメソッドをオーバーライドする場合は、必ずスーパークラスの実装を呼び出す必要があります。

利用可能 iOS 2.0 以降で利用できます。関連項目 – initWithFrame:reuseIdentifier: UITableViewCell.h で宣言された @property reuseIdentifier

于 2012-05-28T13:10:00.033 に答える
4

適合性やパフォーマンスへの影響には触れずに、別のオプションとして、UITableView クラスの visibleCells メソッドを使用して、どのセルが表示されているかを定期的に確認することもできます。

- (NSArray *)visibleCells

ドキュメントに従って:

UITableViewCell オブジェクトを含む配列を返します。それぞれが受信テーブル ビューの可視セルを表します。

于 2012-10-15T21:09:09.527 に答える
0

そのメソッドをサブクラス化UITableViewCellしてオーバーライドできますdealloc

リソースを節約するためにセルを再利用していると仮定して、それを行う正当な理由はありますか?

于 2012-05-28T13:00:25.487 に答える
0

上記のように、画面を離れてもセルは破壊されません。ただし、何をしようとしているかに応じて、関連するアクションを追跡するためにできることがいくつかあります。

最初にデリゲート メッセージがあります。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

これは、セルが画面に入る前に呼び出されます。もう 1 つの可能性は、既に述べたセルの prepareForReuse メソッドです。

別のアプローチは次のとおりです。 willMoveToSuperview: またはその他の関連メソッドを試してオーバーライドします。セルが見えなくなった後にこれが起動されるかどうかはわかりませんが、うまくいくかもしれません。

敬具、マイケル

于 2012-05-28T14:42:45.967 に答える
0

傍受しようとしているのは、UITableView の内部実装の一部であり、セルの管理方法です。このような動作を傍受しようとする方法はありますが、UITableView の将来の実装がこの動作を維持するという保証はないため、それらの使用を避けることをお勧めします。

このような場合は、別のアプローチを検討することをお勧めします。独自のテーブル クラスを設計して実装するか、コード ロジックを変更します。

于 2012-05-28T14:03:19.737 に答える