プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

UITabBarの背景を変える方法

UITabBarControllerで表示されるUITabBarの背景をデフォルトの黒からオリジナルの画像やカラーに変更する方法です。色々探していたところ、あまり情報はなかったのですがカテゴリを利用すれば出来そうという書き込みのもと、試してみると上手くできました。

@interface UITabBarController(CustomView)
- (void) setBackground;
@end

@implementation UITabBarController(CustomView)
- (void) setBackground{
  UIImageView *view = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,320,48)];
  view.backgroundColor = [UIColor colorWithRed:0.0 green:0.8 blue:0.0 alpha:0.5];
  [_tabBar addSubview:view];
  [_tabBar sendSubviewToBack:view];
  [view release];
}
@end


UIImageViewの箇所を色々変更するとよいです。_tabBarはUITabBarControllerがprivateで持っているインスタンスです。これをUITabBarControllerを生成するクラスからロードされるようにしておき、下記のような感じで呼び出せば背景を変更できます。

myTabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
[myTabBarController setViewControllers:[NSArray arrayWithObjects:page1, page2, nil] animated:NO];	
[myTabBarController setBackground];


Objective-Cってこんな機能があったんですね。。
カテゴリを利用すればprivateなインスタンスもいじれるみたいなので色々UIを変更できそうです。

追記

上記の方法だと実機にインストールできなかったので、下記に変更。warningはでるのですが、実機で動作しました。

//  [_tabBar addSubview:view];
//  [_tabBar sendSubviewToBack:view];
  [[self tabBar] addSubview:view];
  [[self tabBar] sendSubviewToBack:view];