6

アプリの最初のビューに移動する必要があります。いくつかのビューがスタックにプッシュされ、次にモーダルナビゲーションコントローラーとさらに多くのビューがスタックにプッシュされます。

私が抱えている問題は、使用[[self navigationController] popToRootViewControllerAnimated:YES];するとモーダルスタックの最初のビューに戻るだけであるということです。

そして[[self navigationController] popToViewController:..、本当のファーストビューコントローラーはにアクセスできないので、私は仕事に取り掛かることができません[[self navigationController] viewControllers]

これを達成する方法について何かアイデアはありますか?ありがとう。

4

4 に答える 4

6

これを行う:

[[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
    }
}
于 2012-04-13T21:16:37.733 に答える
0

AppDelegate.m クラスでは、次のフローでメソッドを作成します...

-(void)MethodName{//your method name
    YourViewController *objViewController = [[[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil] autorelease]; ///define your viewcontroller name like "FirstViewController" 
    UINavigationController *yourNavigationController = [[[UINavigationController alloc] initWithRootViewController:objViewController] autorelease];

    self.window.rootViewController = yourNavigationController;
}

firstview でリダイレクトする場合は、appdelegate オブジェクトからこのメソッドを呼び出すだけです....

于 2012-04-14T12:30:35.200 に答える
0

委任パターンを使用してそれを行う必要があります。respondsToSelector具体的には、デリゲートのメソッドを実装するプロトコルを作成します。

詳細については、この投稿を参照してください。それはあなたが探しているものとほぼ同じであるはずです。を使用する代わりに、ナビゲーション スタックから 1 つのビューをポップするだけでよいことを除いて、同様のことを行う必要がありましたpopToRootViewControllerAnimated:

于 2012-04-13T21:35:43.570 に答える
0

iOS6の場合...

[self.view.window.rootViewController dismissViewControllerAnimated:YES completion:nil];
于 2015-08-18T22:15:50.910 に答える