私はカスタムテーブルセルにカスタムビューを持っています。カスタムビューの特定のプロパティが変更されるたびに- (void)drawRect:(CGRect)rect
にビューを再描画する[self setNeedsDisplay]
が呼び出されます。このプロパティは、テーブルビューのデリゲートのtableView:cellForRowAtIndexPath:
に設定されています。しかし、テーブルビューが画面より大きく、セルを再利用する必要があるときは、setNeedsDisplay
のたびにdrawRect
が呼び出されません。特に私はテーブルをすばやくフリックするとき。ゆっくりとスクロールしても問題ありません。これは、最初と最後のセルの情報がしばしば正しくないことにつながります。 setNeedsDisplayが常にdrawRectを呼び出すとは限りません
drawRect
への呼び出しがある
setNeedsDisplay
へのすべての呼び出しのために、通常はそれを見ることができますが、私はテーブルビューをスクロールするとすぐに
setNeedsDisplay
から
drawRect
以上の呼び出しがあります。確かにここには1対1の比率があるはずです。
通常のUIViewで同じカスタムビューを使用し、setNeedsDisplay
を呼び出すたびに完全に再描画します。この問題は、テーブルビューとセルを再利用することによって分離されているようです。
ここで何が起こっているのか分かりますか? カスタムビューを強制的に再描画する方法はありますか?
私はテーブルを再描画しません。ちょうどカスタムビュー。 – kareman
reloadDataは適切なタイミングであなたのためにsetNeedsDisplayを呼び出します。あなたはフレームワークと戦っているようです。フレームワークが更新するものを決定し、単にtableViewを実装するようにします:cellForRowAtIndexPath: – amattn
reloadDataは、テーブルのすべてのセルを破棄し、再クエリするデータソースと可視セルを再作成させます。それは単なるセルをリフレッシュするのに必要な以上に多くのことです。 – rpetrich