2

我正在开发一个应用程序,其中包括通过视图故事板的相对复杂的导航路径。场景是,我有一个带有多个控制器的 UINavigationController,每个控制器都可能呈现模态,这些模态本身具有 UINavigationCollers,它们有自己的一组控制器,可以呈现模态等等。我的问题是我需要一个基本上取消并一直弹出到根视图控制器的一般方法。

您会建议一种机械方法,通过混合使用 popToRootViewControllerAnimated 和 dismissViewControllerAnimated 调用来回溯视图控制器吗?或者,鉴于这条复杂的路径,是否有更简单的方法可以跳回我的根目录?

感觉这将是一个普遍的问题。我们欢迎所有的建议!

请注意,我已经看到了相关的问题 - 我已经知道如何在路径已知时执行必要的步骤来弹出控制器。我正在寻找的是一种以一般方式执行此操作的方法。

谢谢!

4

3 回答 3

0

如果您只是在您的主导航控制器子节点上调用 popToRootViewacontroller ,那么您应该只需要它。

于 2012-06-21T23:29:56.533 回答
0

您可以创建一个实现 UINavigationControllerDelegate 的类,并让所有 UINavigationController 将该类的单个实例设置为委托。然后,如果您知道要弹出的视图控制器,则可以使用

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

如果您还没有处于所需的视图控制器,请继续弹出。

于 2012-06-21T23:50:44.480 回答
0

我最终通过操作 UIWindow.rootViewController 属性解决了这个问题。这使我可以从任意视图控制器快速弹回根目录。来自文档:“如果窗口具有现有的视图层次结构,则在安装新视图之前删除旧视图。” 感谢回复的人。

- (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 回答