UIAlertView と UIActionSheet だけでなく、UITabBarViewController のpushViewController:animated
、 、およびタブ スイッチなどのメソッドが使用されている場合に、ビュー階層で何が起こるかを理解しようとしています。presentModalViewController:animated
(補足: これを行っているのは、自分の作成した特定の UIView が画面に表示されているかどうかを知る必要があるためです。その UIView またはそのスーパービューがビュー階層にどのように追加されたかについては何も知りません。誰かが知っている場合これを判断する良い方法です。知識を歓迎します。)
それを理解するために、さまざまな状況で [[UIApplication sharedApplication] keyWindow] サブビューの階層をログアウトしてきました。次は正しいですか。
新しい viewController が UINavigationController のスタックにプッシュされると、古い viewController のビューはビュー階層になくなります。つまり、最上位のビュー コントローラーのビューのみが UINavigationController のビューのサブビューです (ログによると、実際には UILayoutContainerView などのいくつかのプライベート クラスです)。スタックの最上位コントローラの下にあるビュー コントローラのビューは、実際にウィンドウから削除されていますか?
新しい viewController が を介して提示されると、非常によく似たことが起こり
presentModalViewController:animated
ます。新しい viewController のビューは、キュー ウィンドウの唯一のサブビューです。これは正しいです?理解するのが最も簡単なこと: UIAlertView は独自のウィンドウを作成し、それをキーにします。
私が遭遇した最も奇妙なこと: UIActionSheet は
showInView:
メソッドを介して表示され、actionSheetはビュー階層にまったくありません。に引数として渡されたビューのサブビューでshowInView:
はなく、キー ウィンドウのサブビューとして追加されず、独自のウィンドウを作成しません。では、どのように表示されますか?これはまだ試していないので、UITabBarController のタブが切り替えられたときに keyWindow 階層で何が起こるか知りたいです。選択した UIViewController のビューは一番上に移動しますか?それとも、表示されたビューだけがウィンドウ階層にある
pushViewController:animated
とのように機能しますか?presentModalViewController:animated