iOSアプリではよく見かけるNavigation Controllerの使い方を解説します。
環境
この記事の情報は次のバージョンで動作確認しています
【Swift】Version 4.2.1
【iOS】12.1.4
Navigation Controllerとは?
複数の画面をナビゲーション表示付きで階層的に管理する部品です。
Navigation Controllerの管理下に置かれた画面の上部にはナビゲーションバー(Navigation Bar)とBackボタンが表示され、統一された操作で画面の移動ができます。
iOS標準の「設定」アプリ等はこのNavigation Controllerが使われている代表例です。
Navigation Controller の設定方法
StoryboardでNavigation Controllerを追加する方法を解説します。
メニューから追加する方法と、部品のドラックによる2パターンあります。
メニューから追加
Navigation Controllerの管理下にしたい画面(View2)を選択した状態で、メニューからEditor→Embed In→NavigationControllerを選びます。
下図のようにView2の手前に、Navigation Controllerが配置されます。
一見、新たな画面が追加されたように見えますが、あくまでコントローラーですので、画面が増えるわけではありあません。当然ながら部品なども配置できません。
なお、NavigationControllerと直接つながった画面(View2)は、コントローラーによって管理される画面ツリーのトップ画面(rootView)になります。
部品のドラッグによる追加
ラベルやボタンと同じように、Object LibraryからNavigation Controller部品をドラッグして配置する事も可能です。
ただ、必ずTable Viewがセットでついてきて、使い勝手はあまりよくありませんので、前途のメニューからの追加方法をおすすめします。
画面遷移の方法
Navigation Controller管理下での画面遷移方法ついて、Segueを使ったケースとSegueを使わないケースでそれぞれ解説します。
Segueを使った画面遷移
ナビゲーション付きで画面遷移するには、Segueの種類にShowを選択します。横にスライドする独自のアニメーションで画面が切り替わるようになります。
Showの代わりにPresent Modallyを選択した場合は、通常のモーダル型画面遷移となります。この場合はNavigation Controllerの管理下から外れ、遷移先ではナビゲーションが表示されません。
Segueを使った画面遷移の詳細な手順はこちらの記事(↓)を参照してください。
Segueを使わない画面遷移
ナビゲーション付きで画面遷移するには、UINavigationController.pushViewController()メソッドを使って画面遷移します。
通常の画面遷移メソッドUIViewController.present()を使うと、Navigation Controllerの管理下から外れ、モーダル画面表示となります。
実装例はこちらの記事(↓)を参照して下さい。
画面の戻り方
Navigation Controller配下では、特別な実装不要でナビゲーションバーに標準で表示されるBackボタン、または画面スワイプで1つ前の画面に戻る事ができます。
任意のタイミングで戻りたい、あるいは戻る画面を指定したい場合は、コードによる実装が必要となります。
一階層戻るにはUINavigationController.popViewController()メソッドを使います。
実装例はこちらの記事(↓)を参照して下さい。
最後に
ナビゲーションバーのカスタマイズ方法について、こちらの記事(↓)にまとめていますので合わせて御覧ください。