0

自分のコードのどこに問題があるかを見つけるのに苦労しています。最初のビューの読み込みでは、すべてが正常に機能し、正常に読み込まれますが、そのビューに再度アクセスすると、最初の 2 つのセルが空であるように見えます。ディクショナリ (dict) をviewWillAppear:ログに記録すると、データが正常に記録されるため、エラーはcellForRowメソッド内にある必要があります。私の方法を見て、私が間違っているところを見てください.

http://pastebin.com/Va84MG5g

4

1 に答える 1

3

まず第一に、なぜメソッドUITableViewCell内で非常識なカスタマイズをすべて行っているのtableView:cellForRowAtIndexPath:でしょうか? カスタムUITableViewCellサブクラスを作成し、そこで設定を行います。

クラスのinitWithStyle:メソッドで、すべてのサブビューを のフレームに追加します。これはCGRectZero、初期化時にテーブル ビュー セルがその大きさを認識していないためです。ここでもテキストの配置や色などを設定できます。次に、 でlayoutSubviewsすべてのフレームを設定します。prepareForReuseあなたのようなものをオーバーライドUIImageViewsして nil に設定します。これは、再利用されたセルのパフォーマンスに役立ちます。

最初の 2 つのセルにデータが表示されない理由について、最初に考えたのは、再利用のためにセルを設定する方法に関係があるということです。返さUITableViewCellれたセルがnil. では、 を返すとどうなりますUITableViewCellか? これらすべてのサブビューを割り当て/初期化する部分をスキップするため、基本的にセルには何も追加していません。UITableViewカスタム サブクラスを作成し、代わりにそれをデキューするように依頼すると、探している結果が得られると思います。

注:少なくとも iOS 5 をターゲットにしている場合はUITableViewCell、nib で のレイアウトを作成し、nib をテーブル ビューに登録できます。そうすることで、常にデキューされたセルを取得することが保証され、if (cell == nil) チェックを行う必要はありません。iOS 6 をターゲットにしている場合は、UITableViewCellサブクラスを登録できます。

于 2013-01-11T19:59:14.383 に答える