ナビゲーションバーのカスタマイズに関して
ナビゲーションバーのカスタマイズ方法に関して書こうと思います。
ナビゲーションバーは、UINavigationItemで管理されています。
このUINavigationItemは、下の4つのプロパティがあります。
① title
② prompt
③ leftBarButtonItem
④ rightBarButtonItem
通常、Stroyboardを使うとカスタマイズに限界があるぽい(やり方しらないだけかも?)
まず、titleとpromptについて、
UIViewControllerのviewDidLoadメソッドにコードを書いて行きます。
UINavigationItemを参照して、プロパティのtitleとpropmtに値を下記の様に設定します。
- (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.prompt = @"2012-09-11"; self.navigationItem.title = @"ToDoリスト"; }
表示した時のイメージは、下みたいな感じになります。
次に、leftBarButtonItemとrightBarButtonItemに関して、
これもUIViewControllerのviewDidLoadメソッドにコードを書いて行きます。
UINavigationItemを参照して、プロパティのleftBarButtonItemとrightBarButtonItemに
値を下記のように設定して行きます。
- (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.prompt = @"2012-09-11"; self.navigationItem.title = @"ToDoリスト"; UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemCompose target:nil action:nil]; UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: UIBarButtonSystemItemEdit target:nil action:nil]; self.navigationItem.rightBarButtonItem = rightItem; self.navigationItem.leftBarButtonItem = leftItem; }
UIBarButtonSystemItemComposeとかUIBarButtonSystemItemEditとか指定していますが、
これは、表示するボタンイメージで、いろいろ種類があります。
今回は、下記のような表示イメージになります。
それで、このボタンですが、独自の画像を指定することもできます。
方法は、UIButtonとUIBarButtonItemのinitWithCustomViewを使うと独自の画像を
ナビゲーションバーのボタンとして定義することができます。
その実装ですが、下記の様な実装になります。
- (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"ToDoリスト"; UIButton *image = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 30, 30)]; [image setBackgroundImage: [UIImage imageNamed:@"Twitter.png"]forState:UIControlStateNormal]; [image addTarget:self action:@selector(rightItemAction) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *rightItem = [[UIBarButtonItem alloc]initWithCustomView:image]; self.navigationItem.rightBarButtonItem = rightItem; }
下記のような表示イメージになります。
ちなみに、ナビゲーションバー自体の色も変更可能です。
UINavigationBarのtintColorにUIColorを使って色を指定します。
self.navigationController.navigationBar.tintColor = [UIColor brownColor];