如何在故事板中移回根视图控制器?
我想做的事情似乎很简单,但我在网上找不到任何答案。 我有登录屏幕作为根视图控制器,然后是标签栏控制器,在每个选项卡中我都有一个导航控制器。
我使用了故事板,层次结构如下所述,
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
控制器导航控制器的故事板标识符。
根据图片白色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控制器?