0

UIVIewController複数のオブジェクト (* 以下の注を参照)によって管理されるビュー階層を使用するアプリが、いつでもウィンドウに表示されます。そのためshouldAutorotateToInterfaceOrientation:、デバイスの回転時にメソッド呼び出しをUIWindow.

UIWindowオブジェクトが、その子のいずれかではなく、最高レベルの を呼び出すようにするにはどうすればよいUIViewControllerですか?

これが、ローテーション レイアウト アニメーションと変更が正しく反映される唯一の方法のようです。

「View Controller Programming Guide」では、iOS のドキュメントに次のように記載されています。

iOS アプリケーションでは、window オブジェクトが現在の向きの変更に関連する作業の多くを行います。ただし、アプリケーションのビュー コントローラーと連携して、方向の変更が発生するかどうかを判断し、発生する場合は、変更に応答するためにどの追加メソッドを呼び出す必要があるかを判断します。具体的には、ルート ビューが最後にウィンドウに追加または表示されたビュー コントローラーで動作します。つまり、window オブジェクトは、「View Controller のビューの表示」で説明されているメカニズムのいずれかを使用してビューが表示された最前面の View Controller でのみ機能します。</p>

しかし、私の経験はこれとは異なることがわかりました。が特定の子ビュー コントローラーをUIWindow呼び出している場合、最上位のビュー コントローラーのビューを から削除して再度追加しても、同じ子が呼び出されます。つまり、トップ レベルのビュー コントローラーを最近追加されたビューにすることはできません。shouldAutorotateToInterfaceOrientationUIWindow

(*)注: 同じ画面で複数のビュー コントローラーを使用することは推奨されないと指摘する人もいます。これは、さまざまなケースで実行不可能な目標であると断言します。同時に 2 つのテーブル (UITableViewControllers) を表示するアプリを考えてみましょう。または、私の場合、UITabBar のグラフィック/アートの制限により、UITabBarController をエミュレートするカスタム ビュー コントローラーを必要とするアプリです。一度に 1 つの UIViewController (またはそのサブクラス) のみを表示するようにアプリケーションをリファクタリングする方法がわかりません。

アップデート

インターフェイス オリエンテーション イベント処理のために UIWindow オブジェクトが呼び出す UIViewController について一貫した答え (または示された動作) を見つけられないので、唯一の正しい答えはまったく答えがないことだと結論付けました。同じ画面 (UINavigationController と UITabBarController を除く)。

4

2 に答える 2

0

あなたの主な質問に答えられるかどうかはわかりませんが、複数のView Controllerが必要な理由の例としては、それらは単なるビューである可能性があります。複数のテーブルビューを備えたアプリをたくさん作成しましたが、UITableViewControllerではなく通常のUITableViewを使用しています。UITableViewControllerは、単一のUITableViewを管理するためのほとんどのデフォルトのビューコントローラーであり、実際にはあまり機能しません。

通常のビューで十分なビューコントローラを使用しているようです。

于 2011-03-22T05:57:21.983 に答える
0

ビューが最初または最後にウィンドウに配置されたのはView Controllerです(申し訳ありませんが、どちらを忘れましたか)。動作は予測可能ですが、文書化されていないため、変更される可能性があるため、依存しないでください。他の回答が示唆するように、複数のView Controllerを同時にアクティブ/可視にしないでください。

ああ、TabBar の例では、UITabBar をサブクラス化するか、デリゲートを使用することもできます。したがって、UITabBarViewController を使用してタブを管理すると、カスタム ビューを使用して独自のタブ バーを描画できるはずです。

于 2011-03-22T10:20:34.403 に答える