Swift:別階層のViewControllerの取得
parent(旧parentViewController)
Navigation Controller などの現在の階層の親VCを取得。
モーダル表示した場合
モーダル表示present(_:animated:completion:)
とはこれまでの階層構造とは別の階層が生まれる画面遷移。なのでparent
では過去のVCは取得できない。
例えば以下のような画面の重なりになっていたとして
A: ViewController
B: NewModalViewController //A.present(_:animated:completion:)
presentingViewController
Bから見たAのこと。自分"を"提示しているVC.
presentedViewController
Aから見たBのこと。自分"が"提示しているVC
覚え方
英語の復習。このpresentingやpresentedは現在進行系や過去形ではなくbe動詞と一緒に使われる形容詞っぽい。
ingは「物や他人が自分を〇〇している」
The soccer game is exciting (to me).
edは「自分が〇〇している」
I am excited at the soccer game.
https://global-square.com/blog/exciting-excited/
発展
しかし Navigation Controller などでpush,pushと遷移したあとにpresent Modallyした時は少し複雑になるらしい。
A: TabBarController
B: NavigationController //A.addChild(B)
C: FirstNavChildViewController //B.pushViewController(_:animated:)
D: NewModalViewController //C.present(_:animated:completion:)
タブ遷移やプッシュ遷移はpresent Modallyには当たらないはずなので‥。ちょっと今は時間がないので後で検証したら追記します。詳しい方いたら回答よろしくお願いしますm(_ _)m
A.presentedVC = D?
B.presentingVC = ?
B.presentedVC = ?
C.presentingVC = ?
C.presentedVC = ?
D.preesntingVC = A?
presentとmodalの言語的な意味
present
プレゼントするのpresentだが、画面遷移的な意味合いでいうと「提示する」が一番しっくりくる。
Modal
Mode(モード、様式、形式)の形容詞。直訳で「様式的な」などの意で、上から被さるみたいな意味ではない。「現在のモードを外れて別のモードを開始する(それまで元のモードの操作はさせない)」といった意味でpresent Modally。
モーダルダイアログとは、メインコンテンツの上に表示されるダイアログで、ユーザーにインタラクションを要求する特別なモードにシステムを移行させるもののことである。このダイアログは、ユーザーがそのモーダルダイアログに明確にインタラクトするまで、メインコンテンツを無効にする。
https://u-site.jp/alertbox/modal-nonmodal-dialog
Discussion