3

UITableViewCell のサブビューであるカスタム UIView があります。セルが描画されると、UIView サブクラスで drawRect: を正しく呼び出して、カスタム ビューも描画されます。セルがリロードされると、ビューが正しく描画されます (drawRect:が呼び出されます)。

特定のイベント (タイマーなど) が発生すると、セル全体をリロードせずにビューを再描画したいと考えています。(セル内のビューはこれだけではありません。)

ただし、サブビューを呼び出しsetNeedsDisplayても何も起こりません。

私のビューdrawRect:が呼び出されると、結果の画像がバッキングのどこかにキャッシュされ、setNeedsDisplayそのバッキングが画面に再描画されるようになると思いますが、drawRect:呼び出しが再び呼び出されることはありません。

drawRect:セルが作成された後に二度と呼び出されないのはなぜですか?

編集: セルのサブビューは nib から作成されます。つまり、UIViewController が nib からロードされ、そのビューが UITableViewCell に追加されます。

(コードで作成された) nib からロードされていないカスタム ビューを使用してテスト ケースを最初から作成しましたが、期待どおりに動作setNeedsDisplayし、drawRect:呼び出しが発生します。これは、.xib ファイルで設定されたものか、ビューが nib からロードされたときに別の方法でビューに発生するものでなければなりません。

4

1 に答える 1

1

私はちょうど同じ問題に遭遇しました。私にとっては、それは私の XIB の問題でした - 私は UIView をサブクラス化しています - それに応じて適応してください。IB での私の間違いは、コントロールを UIView にアタッチするのではなく、「ファイルの所有者」にアタッチしたことです。私は経験が浅いので、もっと大きなことが起こっていると確信しています。おそらく、もう少し経験のある人が詳しく説明できるでしょう。

それが役立つことを願っています!

于 2011-05-13T07:20:06.343 に答える