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 の背景色を変更する を参考にしてください。

[ もどる ]