1

私の StoryBoard では、ナビゲーション コントローラー内にルート ビュー コントローラーを埋め込んでおり、このビューはアプリの起動時に表示されます。次に、ユーザーは一連のビューを通過します。これらのビューは、基本的にモーダルに表示されるビュー コントローラーです。

ルートView Controllerに戻る機能を実装しようとしているので、

-(IBAction)backToMenu{
    NSLog(@"Back to menu");
    [self.navigationController popToRootViewControllerAnimated:YES];
}

しかし、何も起こりません。私がそれを行うと、NSLog(@"%@", self.navigationController");それが印刷nullされるので、それが私の問題の原因だと思います。popToRootViewControllerAnimated:モーダルに表示されたビュー コントローラーを呼び出すことはできません。

ルート ビュー コントローラーへの参照を渡さない限り。しかし、これは正しいアプローチですか?その場合、ルート ビュー コントローラーへの参照をどのように渡しますか? すべてのビュー コントローラは のカスタム サブクラスのインスタンスであるため、UIViewControllerこのクラスのコードにこれを挿入してみました:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    [[segue destinationViewController] navigationController] = [[segue sourceViewController] navigationController];    
}

navigationControllerしかし、それは割り当てられないというエラーが表示されます。

何かご意見は?

4

3 に答える 3

0

ちょうどそれを解決しました。

問題は、ストーリーボードでは、最初のビューコントローラーがルートビューコントローラーであり、埋め込まれているナビゲーションコントローラーではないことでした。

ナビゲーションコントローラーを最初のビューコントローラーとして設定すると(つまり、矢印をドラッグしてポイントするように)、popToRootViewControllerAnimatedチャームのように機能します。

于 2012-05-25T11:27:08.367 に答える
0

のドキュメントにはdismissViewControllerAnimated:completion:、次のように書かれています。

複数のビュー コントローラーを連続して提示し、提示されたビュー コントローラーのスタックを構築する場合、スタック内の下位のビュー コントローラーでこのメソッドを呼び出すと、その直接の子ビュー コントローラーと、スタック上のその子の上のすべてのビュー コントローラーが破棄されます。

これは、ルート ビュー コントローラーへの参照を保持する (または通知する) 必要があり、その上でこのメソッドを呼び出すことを示唆しています。dismissModalViewControllerAnimated:(あなたがそれを使用している場合に備えて、非推奨についても同様の注意事項があります。)

于 2012-05-24T15:32:53.170 に答える
0

メソッドを実装するクラスは-(IBAction)backToMenuUIViewController を継承していますか? popToRootViewControllerAnimated を実装しているクラスが他のクラスから継承されている場合、このスキンのエラーが発生します。元の navigatorController への参照を保持するには、次のようにします。

  1. backToMenu が実装されているクラスで、ナビゲーション コントローラーへのポインターへのポインターを次のように宣言UINavigationController *navCon;します。

  2. したがって、このクラスの ViewController をインスタンス化すると、次のようなことができます。

TheClassViewController *theClassVC = [TheClassViewController alloc] initWithNib:@"TheClassViewController" bundle:nil];

theClassVC.navCon = self.navigationController;// ここで参照を渡します

[self.navigationController pushViewController:theClassVC animated:YES];

于 2012-05-24T16:24:35.413 に答える