4

モーダルビューコントローラーのようなものがあり、他のビューコントローラーの上に表示する必要があります。プロセスをより適切に制御する必要があるため、通常のモーダルコントローラー機能(presentViewController:およびその仲間)を使用していません。代わりに、View Controller包含機能(addChildViewController:メソッドグループ)を使用しています。

包含機能により、コードはかなり単純になります。「モーダル」ビューコントローラーを提示する必要がある場合は、それを子としてビューコントローラー階層に追加すると、すべてが期待どおりに機能します。小さな問題の1つは、通常のビューコントローラーがナビゲーションコントローラーにラップされていることです。したがって、モーダルコントローラーをナビゲーションコントローラーの子として追加する必要があります。そうしないと、ナビゲーションバーとツールバーでカバーされます。

ここで問題となるのは、ナビゲーションコントローラーを呼び出すと、コントローラーが通常の方法を使用してプッシュされたかのようaddChildViewController:に、新しいコントローラーもとして設定されることです。これは、モーダルコントローラが表示されている間、その下にある通常のコントローラは外観と回転のコールバックを受け取らないことを意味します。topViewControllerpushViewController:

これはバグのように感じますか、それとも何かが足りませんか?

4

2 に答える 2

3

私も同じ問題を抱えていました。UINavigationControllerこれを解決するには、 (を介して追加された)を含む独自のカスタムView Controllerを作成し、読み取り専用プロパティとしてaddChildViewController:公開します。UINavigationController次に、モーダルビューコントローラーを、の子としてではなく、新しいカスタムビューコントローラーの子として追加できます。UINavigationController

于 2012-07-19T14:39:46.200 に答える
1

のドキュメントでこの文を見逃しましたaddChildViewController:

このメソッドは、カスタムコンテナビューコントローラの実装によってのみ呼び出されることを目的としています。

だから私はそれが私のせいだと思います、そしてこのシナリオは単にサポートされていません。通常のビューコントローラとしてモーダルなものを設計し、適切な第一級市民のようにそれらを階層に接続するのは非常に便利なので、これは残念です。これをサポートするためには、おそらくナビゲーションコントローラーを自分で書き直す必要があります。

于 2012-05-09T09:17:44.540 に答える