0

ルート ビュー コントローラーを備えたメイン ナビゲーション コントローラーがあります。ルート ビュー コントローラーでは、ボタンを押すと、次のように 2 番目のビュー コントローラーが表示されます。

SecondVC *secondVC = [[SecondVC alloc] initWithNibName:@"SecondVC" bundle:nil];
[self.navigationController presentModalViewController:secondVC animated:YES];

2 番目のビュー コントローラーで、別のボタンを押すと、3 番目のビュー コントローラー (今回はストーリーボードから) を表示します。

ThirdVC *thirdVC = [[UIStoryboard storyboardWithName:@"Settings" bundle:nil] instantiateInitialViewController];
[self.navigationController presentModalViewController:thirdVC animated:YES];

ただし、これは何もしません。self.navigationControllerデバッグしたところ、それが判明しましたnil

メインのナビゲーション コントローラーではないでしょうか。または提示しない ModalViewController: ビュー コントローラーをスタックに追加しますか? ID をモーダルに表示する前に、ナビゲーション コントローラーにビュー コントローラーを配置する必要がありますか?

4

3 に答える 3

3

新しいビュー コントローラー SecondVC はモーダルに表示されており、navigationController のビュー コントローラー スタックには追加されていません。新しい UINavigationController を作成し、SecondVC をモーダルに表示する前に navController 内に配置する必要があります。

于 2012-08-23T18:32:04.170 に答える
1

次のようなものを追加する必要があります。

UINavigationController *navControl = [[UINavigationController alloc] initWithRootViewController:secondVC];
[self addChildViewController:navController];
[self.navigationController presentModalViewController:secondVC animated:<#(BOOL)#>]
于 2012-08-23T20:27:53.920 に答える
0

表示中のView Controllerは、Navigation Controller内にありません。また、プレゼンテーション コントローラーのナビゲーション コントローラーにはアクセスできません。

さらに、モーダル ビュー コントローラーの下にあるナビゲーション コントローラーでスタック アイテムをプッシュまたはポップしても、おそらく何も気付かないでしょう。

コントローラーをスタックに入れたい場合は、ビューコントローラーを自分で表示することもできます。

[self.view addSubView:myViewController.view]
myViewController.view.frame = self.view.bounds;

ビューコントローラーを閉じるには、スーパービューから削除するだけです。

ここでの欠点は、一部の did および will appear メソッドがビュー コントローラーで呼び出されないことです。したがって、それらを自分で呼び出したい場合があります。

しかし、プリンシパルはほとんど同じです。また、アニメーション システムを使用してプレゼンテーション アニメーションを簡単にシミュレートできます。

フォームの下に開始点を与えてから、アニメーション ブロックを開始し、view.frame を superview.bounds に配置して、アニメーション時間も与えます。2秒でいいと思います。時には少ない。

この時点で、提示されたビューはスタック上のコントローラー内にあります。提示されたView Controller内でNavigation Controllerを直接変更することはできませんが、オリジナルに意図を伝えるデリゲートを設定できるため、提示するView Controller(ナビゲーションスタック上のもの)は、要求に応じてView Controllerをプッシュまたはポップできます。そして、提示されたView Controllerが一緒にプッシュされます。

もう 1 つの良い点は、他のアプリと同じように行うことができ、セミモーダル ビューを表示できることです。部分的に透明な背景。このようにして、ビューを直接操作しなくても、ビューの背後で起こっていることを表示できます。

于 2012-08-23T18:42:54.053 に答える