UITableViewCell の背景色はwillDisplayCell: で変更する

投稿者: | 2012/11/16

Storyboard のBackground を変更しても反映されない

ちょっと困ったのでメモ。

UITableView(テーブルビュー)でUITableViewCell(セル)の背景色を変えたいと思いました。

で、Storyboard(ストーリーボード)で、ちょいちょいっとBackground(バックグラウンド)の色を変更。
これでOK!Storyboard サイコー!!

…とか思っていたら。

まったく、ぜんぜん、ちっとも、反映されない。orz

Storyboard のBackground ではUITableViewCell の背景色を変更できない。orz
 

willDisplayCell: で変更するらしい

Google先生に聞いてみた結果、ヒットしたのがこちら。

UITableViewCell の背景色を変える « runLoop run];

こちらの記事はStoryboard でなくcellForRowAtIndexPath: での話ですが、おそらく理由は同じ。
UITableView がセルの背景色を自分の背景色と同じに変更してしまうのが理由と思われます。

なので、解決策も同じ。
UITableView のdelegate(デリゲート)メソッド、willDisplayCell: を実装して、その中で背景色を指定します。

 

こんな感じ

私の場合、テーブル構造をインスタンス変数に放り込んでいますので、indexPath をキーにしてセルの背景色指定を行なっています。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {

    // インスタンス変数に格納してあるtableStructure_ 配列からセルの構造定義(cellStructure、ただのNSMutableDictionary)を取り出す
    NSDictionary* cellStructure = (NSDictionary*)[tableStructure_ objectAtIndex:indexPath.row];

    // セルの構造定義からcellIdentifier値(ただのNSString)を取り出す。
    NSString* cellIdentifier = [cellStructure objectForKey:@"cellIdentifier"];

    // 取り出した値に応じてセルの背景色を指定。
    if ( [cellIdentifier isEqualToString:@"cellTypeB"] ) {
        UIColor* bgColor = RGB(192,255,96);
        [cell setBackgroundColor:bgColor];
    }
}

 

何だか釈然としない…

せっかくStoryboard があって、視覚的に色指定ができるのに、いざやってみたら反映されなくて、結局コードで指定しなきゃいけない。
って、どーなの?

最初、cellIdentifier が引っこ抜けるんだから、そのままdequeueReusableCellWithIdentifier:でもう1回セル定義をStoryboad を呼び出して、そこで背景色を…とかやってみたのですが、そうしたらそうしたで、今度はDefault カラー(透明?)を設定したセルが透けまくりで、ベースのUIViewの背景色を黒にしていた私のテーブルは真っ黒けに…。(T-T)

Storyboard は凄く便利でありがたいツールなんだけれど、ときどきこーゆー落とし穴がセットされているので、注意です。
私はツールを過信しやすいクチなので、よく落ちます。orz

 


 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください