Swift NavigationControllerから遷移元ViewControllerを取得する


概要

NavigationControllerから遷移した時の遷移元ViewControllerを取得する。

戻る遷移時に遷移元に値を渡したい時なんかに使える。


NavigationControllerからModal遷移時の戻る
//self.presentingViewControllerはNavigationControllerが格納
let nvc = self.presentingViewController as! UINavigationController
//遷移元のViewControllerを取り出す
let vc = nvc.viewControllers[0] as! ViewController
vc.property = "value"


NavigationControllerからPush遷移時の戻る
//self.navigationControllerからViewControllerを取り出す
let vc = self.navigationController?.viewControllers[0] as! ViewController
vc.property = "value"


補足

尚、UINavigationController.viewControllersには現在のViewControllerを含めた遷移階層がスタックされているので、遷移元のViewControllerを知りたい場合には、viewControllersの最後または最後から2番目の要素となる。

//NavigationControlleからModalで遷移したケース。
nvc.viewControllers.last
//NavigationControlleからpushで遷移したケース。現在のviewControllerもスタックに積まれている
var index = nvc.viewControllers.count - 2
nvc.viewControllers[index]