2011年7月27日水曜日

UITableVIewのセルの色を変えたい

UITableViewのセルの色を変えたり、透過させたい、という比較的稀な(?)ことをやってみたいことがありますが、単純にbackgroundColorを指定しても反映されません。
独自のセルを用意した場合も同様で、いくらInterfaceBuilder上で色を設定してみてもテーブルに表示されるころには白くなっています。
これはUITableViewが強制的に色を統一してくるからです。

色を変えるためにはセルを描画する直前に呼ばれるtableView willDisplayCellをオーバーライドしてやります。


- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
 if (indexPath.row % 2) {
  cell.backgroundColor = [UIColor colorWithRed:0.9 green:0.9 blue:0.9alpha:1.0];
 }
}

例えばこんな風にしてやれば一行おきにちょっと暗い色にできます。

2011年7月25日月曜日

UIImagePickerControllerでカメラを表示するとViewが破棄される

とある画面からUIImagePickerControllerをカメラモードで起動した後に戻ってくると、その画面が初期化されてしまう、ということがあります。
ユーザー操作で設定情報を覚えていたのにカメラから戻ってきた途端に初期化されて忘れてしまう、ということになってしまう困ったぞ、と。

このときデバッグで起動するとコンソールに「Received memory warning」というメッセージが出ていて、これはメモリ警告が発生したことを表しています。メモリを使い過ぎ、ということなのでiOSはviewを破棄してしまいます。なので、カメラから戻って来たときにviewの生成から始まってしまい初期化されてしまう、という現象。

メモリ警告は「didReceiveMemoryWarning」というメソッドで通知されるので、ここで必要な情報は別領域に退避してやって、再生成時に復元してやる必要があります。