7

uitableviewのセルを再起動できることは誰もが知っていますが、奇妙な結果がいくつか見られます。私はカスタムセルを作成しています。各セルには4つの列があり、各列には画像があるため、形式は次のようになります| img | img | img | img | セルが返された後、各セルを構成しています。例として、最初の列を画像1に構成し、次に2番目の列を別の画像に構成します。

ここで、テーブルビューに一度に2行しか表示できないと仮定します。

|a0|a1|a2 |a3 |
|b4|b5|b6 |b7 |
------cell c not visible to user------
|c8|c9|c10|c11|

ユーザーが下にスクロールすると、上の列'a'(a0-a3)が非表示になり、セルが非表示になることがわかっている限り、列cに再利用されます。

上記の例は、すべてのセル/行を完全に占有できる場合、つまり合計12枚の写真がある場合に正常に機能します。

しかし、私が10枚の写真を言った場合(最後の行は2枚だけで埋められ、他の2枚は次のように空になります:

|a0|a1|a2 |a3 |
|b4|b5|b6 |b7 |
------row/cell 'c' not visible to user------
|c8|c9|empty|empty|

ただし、問題が発生します。上にスクロールしてセル/行'c'を表示すると、次の図が表示されます。

|a0|a1|a2 |a3 |
------row/cell 'a' not visible to user------
|b4|b5|b6 |b7 |
|c8|c9|a2|a3|

行/セルcの最後の2列は空である必要がありますが、代わりにa2とa3が表示されていることに注意してください。

どうすればこれを修正できますか?これを手動で行う方法を考えています。つまり、再利用するときに不要なビューなどを削除する必要があるかどうかを確認することですが、もっと複雑になる可能性があります。これを行うためのより体系的な方法で、より簡単でクリーンな方法はありますか?

返されたセルにその内容を忘れるように依頼する方法はありますか、それとも自分でこれを行う必要がありますか?

ありがとう

4

2 に答える 2

10

あなたは「自分でやる」必要があります。UITableViewCellが再利用されるときはいつでも、以前の内容を保持します。リセット/クリアする場合は、手動で行う必要があります。

カスタムUITableViewCellでは、必要なコンテンツを上書きprepareForReuseしてリセットしたり、新しいコンテンツを設定するときにそれを行うことができます。

あなたの場合、UIImageViewのimageプロパティをnil4つの列すべてで設定すると機能するはずです。

于 2012-05-03T23:44:42.850 に答える
8

最近、同様の問題が発生しました。テーブルビューセルが修正した後、prepareForReuseをオーバーライドします。ここから答えを得た

于 2012-05-03T23:48:21.593 に答える