時々使う UIViewController
のプロパティ presentingViewController
と presentedViewController
において、どっちがどの 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
つまり前面にモーダル表示している ViewController
が presentedViewController
で、モーダル遷移元の ViewController
が presentingViewController
になります。
ちなみに presentedViewController
とよく似たプロパティに parent
というプロパティもありますが、これは自身が Container ViewController
(Navigation Controller) の子 ViewController
である場合の遷移元の ViewController
が返却されるので、今回のようにモーダル遷移した場合に parent
にアクセスした場合は、nil
が返されます。
という感じで本日も以上になります🦅
参考
- https://developer.apple.com/documentation/uikit/uiviewcontroller/1621407-presentedviewcontroller
- https://developer.apple.com/documentation/uikit/uiviewcontroller/1621430-presentingviewcontroller
- https://developer.apple.com/documentation/uikit/uiviewcontroller/1621362-parent