iPad で UITableView の背景色を変更する : Objective-C プログラミング
PROGRAM
iPad で UITableView の背景色を変更する
グループ化した UITableView を iPad で表示させると、外側の背景色が、灰色のグラデーションで表示されます。
この背景色を変更したかったのですけど、iPhone の時のように UITableView の backgroundColor を変更しても、iPad では変更することはできない感じです。
調べてみると、どうやら iPad の UITableView が持つ backgroundView プロパティに、iPad の UITableView の背景が設定されているようでした。この backgroundView は戻り値は UIView 型ですけど、実際には UIImageView が格納されているようで、その image プロパティを調整することで、背景色を変更することができました。
たとえば、UITableView の背景として、デジタルカメラで撮影した写真を貼りたい場合には、次のような感じになります。
// 背景として使用されているビューを取得します。
UIView* view = self.tableView.backgroundView;
// 念のため取得したサブビューが UIImageView であるかを判定します。
if ([view isKindOfClass:[UIImageView class]])
{
// UIImageView であれば、その画像イメージを差し替えます。
UIImageView* imageView;
UIImage* image;
imageView = (UIImageView*)view;
image = [UIImage imageNamed:@"P1000017.JPG"];
imageView.image = image;
}
このようなコードを UITableViewController の viewDidLoad メソッドなどで実行します。
そうすることで、UITableView の背景いっぱいに写真が引き伸ばされて設定されました。
ちなみにこの backgroundView プロパティは、iPad が登場した時の iOS 3.2 から使えるようになったようです。
そのため、iPhone と iPad とで共用のコードを作成する際には、このプロパティを使用できるかどうかを respondsToSelector: メソッドなどで判定する必要があるかもしれません。
また、iPhone の iOS 5 上でこのプロパティを参照すると nil が取得されるようです。
上記の例では写真による背景設定でしたけど、好きな色のグラデーションで塗りつぶしたい場合には、適切な大きさ(配置している UITableView の frame サイズなど)のグラデーション画像を用意して、それを背景画像として設定します。
グラデーションの描画方法は UIView をグラデーションで塗りつぶす が参考になるかもしれません。
背景色の設定としては、以上のような感じです。
UITableView の背景を変更する際の注意点としては、iPhone で背景を変更する際に使用する backgroundColor の設定をしてはいけないようでした。
UITableView の backgroundColor も設定してしまうと、UITableView をスクロールさせた際などに、セルの外側(横)の背景色の描画が崩れてしまった感じでしたので、iPhone と iPad 両対応の UITableViewController を作成している場合には、デバイスに応じて処理を切り分けるなどが必要そうです。
ちなみに iPhone で UITableView の背景色を変更したい場合の方法については、iPhone で UITableView の背景色を変更する を参考にしてください。
[ もどる ]