これを行う:
[[self navigationController] dismissModalViewControllerAnimated:YES];
これで、ナビゲーションコントローラーをモーダルに表示したVCに戻ることができます。その後さらに戻るかどうかは、ナビゲーションコントローラーの前にこれらの「少数のビュー」をどのようにプッシュしたかによって異なります。
編集-最も深いルートに到達するための説明...
これらの「いくつかのビュー」は、基盤となる別のナビゲーションコントローラーのスタックにあるようです。これは少し注意が必要です。スタックをさらに元に戻すためのクリーンな方法は、基盤となるナビゲーションコントローラーを独自のルートにポップさせることです。しかし、その上にあるモーダルVCが実行されたことをどのようにして知ることができますか?
2番目のナビゲーションコントローラーVC_aのモーダルプレゼンテーションを行ったビューコントローラーを呼び出しましょう。これは、最上位のVCがVC_bであるモーダルに提示されたナビゲーションコントローラーです。VC_bがモーダルに自分自身を却下したときに、VC_aがナビゲーションルートにポップすることをどのように知ることができますか?
良い答えは(通常)、VC_bが理由で自分自身を却下することを決定したことです-アプリ/モデルのいくつかの条件が変更され、実行されることを決定しました。
VC_aにもこの状態を検出してもらいたい。VC_bが却下され、VC_aがカバーされようとしているためにviewWillAppearメッセージを受け取った場合:
// VC_a.m
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (/* some app condition that's true when VC_b is done */) {
// I must be appearing because VC_b is done, and I'm being uncovered
// That means I'm done, too. So pop...
[self.navigationController popToRootViewControllerAnimated:NO];
} else {
// I must be appearing for the normal reason, because I was just pushed onto the stack
}
}