2016-12-13 10 views
1

ViewControllerAがnavigationControllerに埋め込まれ、ViewControllerBがViewControllerAによってモーダルに表示される場合。ViewControllerのpresentingViewControllerが間違って設定されていますか?

ViewControllerBのpresentingViewControllerプロパティを印刷すると、presentingViewControllerがViewControllerAではなくナビゲーションコントローラをポイントしていることがわかりました。

しかし、私はpresentingViewControllerがViewControllerAをより合理的に指していると思います。

+0

これは、viewController Aが組み込まれているために発生します** ** 'UINavigationController'の内部 – Rikh

+0

presentingViewControllerドキュメンテーションに基づいて、「presentViewController:animated:completion:メソッドを使用してモーダル(明示的または暗黙的)にビューコントローラを表示すると、提示されたビューコントローラはこのプロパティをビューコントローラに設定しますそれは " – ximmyxiao

答えて

2

しかし、事は、あなたが合理的だと思うかは重要でないということである

ViewControllerAにpresentingViewControllerポイントがより合理的な場合、私は思います。あなたが見ているのは、それが実際にどのように働くかです。あなたの仕事はそれを受け入れて理解することであり、それに同意することではありません。

ルートコントローラであるため、ナビゲーションコントローラはプレゼンテーションコントローラです。これはフルスクリーンのプレゼンテーションであるため、ナビゲーションコントローラは、表示されたビューコントローラのビューに置き換えられたビューコントローラです。

実際には、presentをコントローラAに表示すると、は、に沿って、ナビゲーションコントローラに渡されます。ビューコントローラAには、便宜のためにpresentのみを指定することができます。

それはpresentが送信されたビューコントローラであるが、コントローラB

を(見るために話してからのことを学ぶための方法がないため表示コントローラAは、「ソース」ビューコントローラアップルによって呼び出されます「提示するView Controllerは、必ずしもpresentViewController:animated:completion:を送信したView Controllerではない」という文で始まるthis section of my online bookを読みたいと思うかもしれません。私の本では、ソースビューコントローラをオリジナルプレゼンターと呼びます。

+0

感謝@matt、今私は理解して、presentingViewControllerはソースコントローラと同じではないかもしれない – ximmyxiao

関連する問題