content【Swift】ViewControllerとNavigationControllerの相互関係まとめXcodeiOSSwift概要NavigationControllerが絡んでくると画面間の値の受け渡しが少し複雑になるので、この記事では様々な状況におけるViewControllerとNavigationControllerとの相互関係についてまとめてみました。ThirdViewControllerという構成を想定します。ModallyのSegueが繋いであります。ThirdVCNavigationController(1)とFirstVCまず、アプリを立ち上げるとFirstVCが表示されます。このとき、NavigationController(1)のviewControllersプロパティにはFirstVCが入っています。反対に、FirstVCのnavigationControllerプロパティにはNavigationController(1)が要素として格納されているということになります。NavigationController(1)はFirstVCの親ViewControllerなので、FirstVCのparentプロパティにもNavigationController(1)が同様に格納されます。NavigationController(1)からFirstVCの取得NavigationController(1)からFirstVCを取得する手順は以下の通りです。controllerになるので、viewControllersプロパティの0番目の要素に格納されています。FirstVCからNavigationController(1)の取得FirstVCからNavigationController(1)の取得を行う方法は以下のようになります。ViewControllerがNavigationControllerに所有されていない場合はnavigationControllerプロパティにはnilが格納されるので注意しなければいけません。UINavigationControllerのようにも取得できます。親となるViewControllerが存在しない場合にはこちらもnilが格納されているので注意してください。NavigationController(1)とSecondVCFirstVCからShowで遷移した先がSecondVCです。Showで遷移するとNavigationController(1)のviewControllersにSecondVCが追加で格納されます。viewControllersはスタックのように利用されるため、この時点では1番最後の要素であるviewControllers[1]に格納されていることになります。SecondVCにおいてもFirstVCの時と同様、navigationControllerプロパティとparentプロパティにNavigationController(1)が格納されます。SecondViewControllerSecondVCからNavigationController(1)の取得FirstVCの時と同じです。FirstViewControllerviewControllersがスタックであることを考慮すれば1つ前の画面の取得は上記のようになります。NavigationControllerの階層下で前の画面に値を渡す際はこの方法を使います。Modallyの場合この場合は、NavigationController(1)とSecondVCの間には直接的な関係はありません。firstVC.navigationControllerなどのように一度FirstVCを経由すれば可能です。NavigationController(2)とThirdVC「NavigationController(1)とFirstVC」と同じです。NavigationController(1)とThirdVCNavigationController(1)とThirdVCの間には直接的な関係はありませんが、ThirdVCからNavigationController(1)を取得することは可能です。Modallyで表示したViewControllerが格納されます。UINavigationControllerでNavigationController(1)を取得することができます。NavigationController(1)からFirstViewControllerやSecondViewControllerを取得し、画面を戻るときに値を渡すことができます。まとめViewControllerの相互関係を理解できれば画面間の値の受け渡しがスムーズにできるようになりますね。ViewControllerのリファレンスに出てくるparentとancestorのニュアンスの違いがちょっと分かりにくかったです。Modallyで表示したViewControllerが格納されます。ここの文言に違和感があったのはそのせいですね。切実に英語力が欲しい...。requestStockLike24@wadaaaaniOS開発をしたりPythonで面白そうなことをしています。アプリ開発のための備忘録のようなものです。upLoginユーザーは見つかりませんでした。