2

ビューのストーリーボードを介した比較的複雑なナビゲーション パスを含むアプリケーションに取り組んでいます。シナリオは、いくつかのコントローラーを備えた UINavigationController があり、それぞれがモーダルを提示できる独自のコントローラーセットを持つ UINavigationCollers を持つ可能性があるモーダルを提示する可能性があるなどです。基本的にキャンセルして、ルート ビュー コントローラーまですべてポップする一般的な方法です。

popToRootViewControllerAnimated 呼び出しと DismissViewControllerAnimated 呼び出しを組み合わせてビュー コントローラーをバックトラックする機械的なアプローチを提案していただけますか? または、この複雑なパスを指定してルートに戻る簡単な方法はありますか?

これは一般的な問題のように感じます。どんな提案でも大歓迎です!

関連する質問を見たことがあることに注意してください-パスがわかっている場合にコントローラーをポップするために必要な手順を実行する方法は既に知っています。私が探しているのは、これを一般的な方法で行う方法です。

ありがとう!

4

3 に答える 3

0

UIWindow.rootViewControllerプロパティを操作することで、この問題を解決することになりました。これにより、任意のViewControllerからルートにすばやく戻ることができます。ドキュメントから:「ウィンドウに既存のビュー階層がある場合、新しいビューがインストールされる前に古いビューが削除されます。」応答してくれた人々に感謝します。

- (void)popToRootViewControllerFromViewController:(UIViewController *)fromViewController
{
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *rootView = [mainStoryboard instantiateViewControllerWithIdentifier:@"RootViewController"];

    [fromViewController presentViewController:rootView animated:NO completion:^{
        self.window.rootViewController = rootView;
    }];
}
于 2012-06-22T18:43:16.287 に答える
0

メインのナビゲーションコントローラーの子でpopToRootViewacontrollerを呼び出すだけの場合は、これで十分です。

于 2012-06-21T23:29:56.533 に答える
0

UINavigationControllerDelegate を実装するクラスを作成し、すべての UINavigationControllers にそのクラスの単一のインスタンスをデリゲートとして設定させることができます。次に、ポップしたいView Controllerがわかっている場合は、使用できます

– (void)navigationController:(UINavigationController *)nc
      willShowViewController:(UIViewController *)vc
                    animated:(BOOL)animated;

目的のビュー コントローラーにまだ達していない場合は、ポップし続けます。

于 2012-06-21T23:50:44.480 に答える