2012-05-09 6 views
4

他のビューコントローラの上に表示する必要があるモーダルビューコントローラのようなものがあります。私は通常のモーダルコントローラ機能(presentViewController:と友人)を使用していません。なぜなら、プロセスをよりよく制御する必要があるからです。代わりに、私はビューコントローラの包含機能(addChildViewController:メソッドグループ)を使用しています。UINavigationControllerのaddChildViewControllerとtopViewControllerの間の相互作用

封じ込め機能は、コードをかなり簡単にします。私は "モーダル"ビューコントローラを提示する必要があるとき、ビューコントローラ階層に子として追加し、すべてが期待通りに機能します。小さなキャッチの1つは、通常のビューコントローラがナビゲーションコントローラにラップされていることです。したがって、モーダルコントローラーをナビゲーションコントローラーの子として追加する必要があります。それ以外の場合は、ナビゲーションバーとツールバーでカバーされます。

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

これはバグのようですか、何か不足していますか?

答えて

1

私は、このメソッドはのみ カスタムコンテナビューコントローラの実装によって呼び出されることを意図しているaddChildViewController:

のドキュメントでこの文を逃しました。

私はそれが私のせいだと思うので、このシナリオは単純にサポートされていません。どんなものであれ、通常のView Controllerとして設計し、それらを適切なファーストクラスの市民のような階層に結びつけるのが非常に便利なので、これはうんざりです。私はおそらく、内蔵のナビゲーションコントローラを独自に書き直す必要があります。

+0

この問題は迅速に対応していますが、これは目的関数-cの場合は機能しません。それはトップビューコントローラとして追加しています –

2

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

関連する問題