
こんな感じでUINavigationBarの片方のサイドに複数個のボタンをおく方法を探してみました。UIToolBarと異なり、UINavigationBarではUINavigationItem.rightBarButtonItem, UINavigationItem.leftBarButtonItem, それからタイトル部分と、最大でも3個しかアイテムを配置することが出来ません。そのため、複数のボタンを一つの配置箇所にまとめて配置したい場合には、カスタムビューを作成する必要があります。
Appleの配布しているデモアプリケーションにもありますが、こういう場合にはUISegmentedControlのmomentaryプロパティをYESに指定して、ボタンみたいに利用するのがいちばん良いようです。
NSArray *items = [NSArray arrayWithObjects:@"Add", @"YourTurn", nil];
UISegmentedControl *segmentedControl = [[[UISegmentedControl alloc] initWithItems:items] autorelease];
segmentedControl.selectedSegmentIndex = UISegmentedControlNoSegment;
segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
segmentedControl.momentary = YES;
[segmentedControl addTarget:self action:@selector(segmentedControlClicked:) forControlEvents:UIControlEventValueChanged];
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:segmentedControl] autorelease];
この方法でひとまずはUINavigationItemの右側に複数のボタンを作ることが出来ました。しかしまだまだ完璧ではなくて、現地点で分かっている限りでも二つの問題があります。
- ボタンの背景色が通常のボタンとは異なる色になる
- 個々のボタンひとつひとつを個別にDisableすることができない
Appigo Todoなんかは普通にUINavigationBarの右側に3つもまとめてボタンを綺麗に配置してあったりするのですが、一体全体どうやってるんでしょうね?・・・うーん。

3 コメント:
個別のボタン一つ一つのDisabledはsetEnabled:forSegmentAtIndex:でできますよ。
初めまして、
私も同じ事で悩みました(^^)
Navigation ItemのBar Button Itemの
階層下に、Viewを置いて、その階層下に
さらにNavigation Barを置いて
サイズを適度に調整すれば、
うまくボタンを複数並べられますよ。
> 岸川さん
亀レスごめんなさい!
setEnabled:forSegmentAtIndex: ですか!ありがとうございます!
早速試してみようと思います。これってリファレンスに載ってましたっけ?
でもリファレンス以外のAPIも理解してないと一流にはなれませんね、精進します。
> R.Takaiさん
情報ありがとうございます!
Erica SadunさんのクックブックにもNavigationItemにUIToolBarを入れるレシピが書いてあったりして、
なるほど、バーの中にバーを入れるという発想があったかと感心しております・・・
コメントを投稿