UINavigationControllerは「複数のviewからなる箱」と考えるとわかりやすい。次の例はUINavigationControllerの本質をよく表している。
// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let vc = FirstViewController()
let nc = UINavigationController(rootViewController: vc)
window?.rootViewController = nc
return true
}
// FirstViewController.swift
override func viewDidLoad() {
super.viewDidLoad()
let s = SecondViewController()
self.navigationController?.pushViewController(s, animated: true)
}
FirstViewControllerからSecondViewControllerに画面遷移したいとする。FirstViewControllerのボタンをタップしてSecondViewControllerに移る。
FirstViewControllerのviewDidLoadでSecondViewControllerのインスタンスをつくり、それをpushViewControllerで送る。しかしそのままでは、どこにプッシュすればいいかわからない。
そこでFirstViewControllerとSecondViewControllerをまとめあげるUINavigationControllerを用意する。このUINavigationControllerには、最初に表示するviewをrootViewControllerという引数で指定する。rootViewControllerで指定されたviewが、最初に表示されるviewである。
let nc = UINavigationController(rootViewController: vc)
つまりUINavigationControllerの中に各viewがあるような感じになる。FirstViewControllerでプッシュすると、プッシュ先は自動的にncという箱の中に入っていく。