【问题标题】:UINavigationController pop to another root controllerUINavigationController 弹出到另一个根控制器
【发布时间】:2015-08-27 06:49:51
【问题描述】:

我有 3 个视图控制器。前 2 个视图控制器嵌入在 UINavigationController 中,如截图所示:

起点是 View Controller 1 的UINavigationController。然后,我推送到 View Controller 3。但是,我希望它弹出到包含 View Controller 2 的 UINavigationController 的根目录。如何更改导航层次结构?

  • 需要保留弹出动画
  • 我知道更改根视图控制器是一种实现方式,但这在用户体验中会很奇怪

附言此故事板为说明目的而进行了简化;它们是视图控制器 1、2 和 3 之间的许多视图控制器。

【问题讨论】:

    标签: ios objective-c uistoryboard uistoryboardsegue


    【解决方案1】:

    我最终使用以下代码更改了整个 UINavigationController 层次结构:

    // In the View Controller 3's button's `IBAction`:
    NSArray *vcs = @[[self.storyboard instantiateViewControllerWithIdentifier:@"NavController1_Identifier"], self];
    [self.navigationController setViewControllers:vcs];
    [self.navigationController popToRootViewControllerAnimated:YES];
    

    其中NavController1_IdentifierUINavigationController 的第一个故事板标识符。


    似乎在这种情况下也可以使用 unwind segue。

    【讨论】:

      【解决方案2】:

      您需要更改您的 rootViewController。只有在同一导航堆栈中时,您才能弹出到任何视图控制器。

      【讨论】:

      • 正确,您的第二个视图控制器与您的第一个视图控制器不在同一个导航堆栈中。
      【解决方案3】:

      由于您要转到的第二个视图控制器不在您的导航堆栈中,因此您无法弹出到它。您可以做的是不丢失平滑过渡动画:

      1:推送到视图控制器 3

      var contr = self.storyboard!.instantiateViewControllerWithIdentifier("3") as! ViewController3
      self.navigationController?.pushViewController(contr, animated: true)
      

      2:从视图控制器3推送到视图控制器2,你可以使用与上面相同的代码,只要确保更改视图控制器的标识符即可。

      3:你现在可以从这里跳回到你开始的原始屏幕:

      self.navigationController?.popToRootViewControllerAnimated(true)
      

      但是,如果您想在不推送的情况下转到视图控制器 2,您可以只显示视图控制器,这将在视图控制器 2 处启动导航堆栈,但是会丢失以前的视图。

      【讨论】:

        【解决方案4】:

        如下更改根视图控制器..

        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
        UITabBarController *rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"tabBarcontroller"];
        [[UIApplication sharedApplication].keyWindow setRootViewController:rootViewController];
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 2012-11-22
        • 2013-07-25
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多