NavigationBarを表示・非表示

一枚絵のトップ画面からナビゲーションバー付きのTableViewに移動する、もしくはその逆などで、ページによってナビゲーションバーを表示したり非表示にしたい場合の方法。

使うのは、以下の二つ
・画面表示時のアクション『- (void)viewWillAppear:(BOOL)animated』
・ナビゲーションバーの表示を切り替える『[self.navigationController setNavigationBarHidden:YES/NO animated:YES/NO]』

『ナビゲーションバーを表示するページの.m』

//画面表示時のアクション
- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [super viewWillAppear:animated];
}

『ナビゲーションバーを非表示にするページの.m』

//画面表示時のアクション
- (void)viewWillAppear:(BOOL)animated
{
    [self.navigationController setNavigationBarHidden:NO animated:NO];
    [super viewWillAppear:animated];
}

応用として、画面の表示完了時に呼ばれる『- (void)viewDidAppear:(BOOL)animated』で、animatedをONにしてsetNavigationBarHiddenを使うことで、『ページの表示後にスライドしてナビゲーションバーが上に出てくる』という演出をすることも可能。

TabBarとNavigationBarの同居

ネット上で探しても、InterfaceBuilderを使わないでソースを直接書きこむ方法しか見つからなかったので、試行錯誤の末にたどり着いたIBを使った作り方をメモ。

前提
TabBarはNavigationBarより高次の存在。TabBarの1タブの中でNavigationBarが動くイメージ。

1.NewProjectで『Tab Bar Application』を選択
2.MainWindow.xibの『Objects』欄にある『Tab Bar Controller』にObjectLibrary(右下)から『Navigation Controller』を追加
3.プロジェクトにView(とh,mファイル)を追加
4.MainWindowに追加した『Navigation Controller』の中にある『View Controller』のInspector(Attributes Inspector)で『NIB Name』に追加したViewの名前を入力

基本的に『どっちか』じゃなくて『どっちも』なアプリばっかりなんだから、テンプレートにあっても良さそうなもんだけどね。タブナビゲーションアプリケーション。