2012-01-12 11 views
6

私はので、私はチェックマークが表示されます赤い色ではなく、アクセサリーcell.backgroundColorのtableViewに設定した場合、応答がありません:cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... init Code here 
cell.backgroundColor = [UIColor redColor]; 
cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 

を追加しようとした赤で、特定のテーブルの行に色をしようとしています。

私は後でそれをtableView:willDisplayCellに配置することによってそれが機能することを発見しました。これは設計によるものですか?セルを初期化するときにすでに設定した値を無視するのはなぜですか?

答えて

3

セルの外観はtableView:willDisplayCellにカスタマイズされています。それで、あなたの質問に答えるために、はい、それは設計によるものです。アクセサリーのビューとセルのcontentViewのサブビューは、cellForRowAtIndexPathで変更/割り当てする必要があります。

tableView:willDisplayCell:forRowAtIndexPath:のドキュメントから:

テーブルビューは、それによって、それが表示される前にセルオブジェクトをカスタマイズするためにデリゲートを可能に、それは行を描画するために細胞を使用する直前に、そのデリゲートにこのメッセージを送信します。このメソッドは、デリゲートに、選択や背景色などのテーブルビューで先に設定された状態ベースのプロパティをオーバーライドする機会を与えます。デリゲートが返った後、テーブルビューはアルファとフレームのプロパティのみを設定し、行がスライドインまたはスライドするときにアニメートするときにのみ設定します。

1

FYI、Raviの答えは正しいですが、実装を簡素化したい場合は、セルのcontentView背景色を設定して同じ効果を得ることもできます。

cell.contentView.backgroundColor = [UIColor redColor];

これは文書化ソリューションではありませんが、以下は動作します:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
... init Code here 
    cell.contentView.backgroundColor = [UIColor redColor]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; 
} 
関連する問題