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