iOSエンジニアのつぶやき

毎朝8:30に iOS 関連の技術について1つぶやいています。まれに釣りについてつぶやく可能性があります。

【Swift】PresentingViewController と PresentedViewController の違い

時々使う UIViewController のプロパティ presentingViewControllerpresentedViewController において、どっちがどの ViewController を指しているのか分からなくなってしまうことがあるのでメモしておきます👀

結論

それぞれの対応関係は下記のようになります。

        let backViewController = UIViewController()
        let middleViewController = UIViewController()
        let topViewController = UIViewController()

        backViewController.present(middleViewController, animated: true, completion: nil)
        middleViewController.present(topViewController, animated: true, completion: nil)

        backViewController.presentedViewController // middleViewController
        backViewController.presentingViewController // nil

        middleViewController.presentedViewController // topViewController
        middleViewController.presentingViewController // backViewController

        topViewController.presentedViewController // nil
        topViewController.presentingViewController // middleViewController

つまり前面にモーダル表示している ViewControllerpresentedViewController で、モーダル遷移元の ViewControllerpresentingViewController になります。

ちなみに presentedViewController とよく似たプロパティに parent というプロパティもありますが、これは自身が Container ViewController(Navigation Controller) の子 ViewController である場合の遷移元の ViewController が返却されるので、今回のようにモーダル遷移した場合に parent にアクセスした場合は、nil が返されます。

という感じで本日も以上になります🦅

参考

その他の記事

yamato8010.hatenablog.com

yamato8010.hatenablog.com

yamato8010.hatenablog.com