UIToolBarとそのボタンもコードで追加する

UINavigationControllerにはナビゲーションバーの他に、下端にツールバー(UIToolBar)を配置することができる。
UIViewControllerのプロパティはインタフェースビルダのアトリビュートインスペクタで確認、変更することができる。ツールバーに関してもこれで設定すれば良いように思うのだが、

実際にはツールバーは表示されない。

なのでviewDidLoadメソッド等で以下の一行を追加すると

//ツールバーの初期化
self.navigationController.toolbarHidden = NO;


このように今度は表示される。(ひょっとしたら他に方法があるのかもしれないが、私には分からなかった)

UIToolBarはUINavigationBar同様にボタン(UIBarButtonItem)を配置することができるので、前回同様にコードから追加してみた。

  • UINavigationController派生クラスのviewDidLoadメソッド
//ツールバーの初期化
self.navigationController.toolbarHidden = NO;
//前
UIBarButtonItem* previous = [[UIBarButtonItem alloc]
                                initWithTitle:@"前"
                                 style:UIBarButtonItemStyleBordered
                                 target:self
                                 action:@selector(flipView)];
    
// 可変長スペース生成
UIBarButtonItem *flexibleItem = [[UIBarButtonItem alloc]
                                 initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
                                 target:nil
                                 action:nil];
    
//後
UIBarButtonItem* next = [[UIBarButtonItem alloc]
                         initWithTitle:@"後"
                         style:UIBarButtonItemStyleBordered
                         target:self
                         action:@selector(next)];

self.navigationController.toolbarItems =  @[previous, flexibleItem, next];

UIBarButtonSystemItemFlexibleSpaceで生成されるUIBarButtonItemは実際には目に見えない、ボタンとボタンの間に挟まるスペーサの役目を果たす。

さて、これでツールバーの右端と左端にボタンが二つ配置されるはずだ。

配置されないし。

今度はUIBarButtonItemを配置するのはself.navigationController.toolbarItemsではなく、なんとself.toolbarItemsなのである。

self.toolbarItems = @[previous, flexibleItem, next];

一貫性ないじゃん、と突っ込みたくなるのだが仕方が無い。


これで正しく表示された。

前回のエントリと合わせてUINavigationBar、UIToolBar周りの作りと設定の仕方にはかなり癖があるので注意が必要である。私のようにいきあたりばったりではなく、信頼性の高い書籍やリファレンスを片手に作るべきだろう : )