UITableViewのカスタムセルに関する簡単な「ベストプラクティス」の質問があります。私の問題は、if(cell == nil)ブロックにカスタムセルを作成したときに発生します。
- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
(1)ラベルを作成し、それらのtextプロパティを(cell == nil)ブロック内に設定した場合。画面に表示されているセルにのみ正しいテキストが含まれ、残りは再利用されます。
(2)わかりました。では、カスタムセルの建物をブロックの外に移動してみます。もちろん、これにより、ユーザーがスクロールするたびに、セルが何度も何度も再描画されます。
(3)カスタムセル(ラベル、グラフィックなど)の描画も(cell == nil)ブロック内に配置しようとしましたが、ブロックの後にlabels.textプロパティを設定しました。UILabelは、インスタンス化されたブロックの外側からアクセスできないため、これを行うことはできません。クレイジーなfor(UILabel * l in cell.contentView.subviews)を実行できますが、それぞれにifステートメントが必要になります。ラベルと、おそらくそれらを識別するためのいくつかのタグ。
(4)次に、(cell == nil)ブロックの前にすべてのラベルを宣言し、ブロック内でインスタンス化と描画を行い、(cell == nil)ブロックの後にtextプロパティを設定することができます。しかし、10個のUIラベルを渡すと、これは見た目も感じも非常に乱雑になり、(cell == nil)ブロックの内側と外側にこのように広がり、さらにテーブルを「更新」するたびに宣言されます。
私が尋ねる理由は、2〜4個のラベルを使用する場合、常にそれを回避する方法を見つけたためですが、今回は12個のカスタムUILabelを設定する必要があり、グラフィックの再描画を最小限に抑えるために設定したいと思います。おそらくたくさんの細胞があるでしょうから。
私は人々とAppleドキュメントが以下を使用する例を見てきました:
- (void) configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
しかし、それがどのように私を助けるのか本当にわかりません:)
誰かがこれらの種類のものの「ベストプラクティス」を指摘できることを願っています。
ありがとうございました!