如何在故事板中移回根视图控制器?

我想做的事情似乎很简单,但我在网上找不到任何答案。 我有登录屏幕作为根视图控制器,然后是标签栏控制器,在每个选项卡中我都有一个导航控制器。

我使用了故事板,层次结构如下所述,

Root VC | --- tabbar controller | ---Navigation Controller | --- VC1 

要求是从VC1导航回根视图控制器。 我们怎样才能做到这一点?

我使用“Unwind Segues”解决了问题。

步骤1)您需要的最小值是为目标视图子类化视图控制器(也就是先前在导航中弹出的视图,并且您想要展开它)并向其添加这样的方法(方法名称)可以是你想要的任何东西,但它应该是唯一的,因为整个应用程序中的所有展开segue都列在一起):

 - (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue { //nothing goes here } 

步骤2)现在,在您的源视图(也就是您想要放松的视图)中,只需将按钮中的一个segue或者向下拖动到源视图底部的绿色“EXIT”图标。 现在应该有一个连接到“ – unwindToViewControllerNameHere”的选项

就是这样,当您点击按钮时,您的segue将会放松。 我们可以移动到我们想要的任何视图控制器,其余的视图控制器将被释放。

如果您有控制器层次结构

—导航控制器 – | 根VC | — tabbar控制器| —导航控制器 – | — VC1

并且VC1上有一个UIButton ,所以点击你想要移动到root viewcontroller(Root VC),然后使用:

 -(void)moveToRootViewController { //Move to root viewController UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainnav"]; self.view.window.rootViewController = controller; } 

这里mainnav是根mainnav控制器导航控制器的故事板标识符。

ViewControllers层次结构

根据图片白色viewcontroller是一个根视图控制器,tabBarController有两个带导航控制器的选项卡,如果你想从第二个选项卡视图控制器UIButton (黑色)移动到根视图控制器,请点击然后使用上面的代码。

如果您有层次结构,如— Navigation Controller – | 根VC | — VC1 —- | — VC2 —- |

并希望从VC1或VC2转移到根视图控制器(根VC),然后使用:

 [self.navigationController popToRootViewControllerAnimated:YES]; 

这应该足够了。

 [self.navigationController popToRootViewControllerAnimated:YES]; 

使用以下代码

 - (void) forRootViewCon { UINavigationController *nav = (UINavigationController*) self.view.window.rootViewController; UIViewController *root = [nav.viewControllers objectAtIndex:0]; [root performSelector:@selector(returnToRoot)]; } 

调用方法名称为returnToRoot

 - (void)returnToRoot { [self dismissViewControllerAnimated:NO completion:nil]; [self.navigationController popToRootViewControllerAnimated:YES]; } 

要么

 [self.navigationController popToRootViewControllerAnimated:YES]; 

您应该在导航控制器中启用Root VC:

—导航控制器 – | 根VC | — tabbar控制器| — VC1

然后打电话

 [navController popToRootViewControllerAnimated:YES]; 

编辑:我猜你有一些问题,包括导航控制器内的tabBar控制器?