Ios 如何在情节提要中移回根视图控制器?

Ios 如何在情节提要中移回根视图控制器?,ios,iphone,objective-c,cocoa,uistoryboard,Ios,Iphone,Objective C,Cocoa,Uistoryboard,我想做的似乎很简单,但我在网上找不到任何答案。我将登录屏幕作为根视图控制器,然后是选项卡栏控制器,在每个选项卡中我都有一个导航控制器 我使用了故事板,层次结构如下所述 Root VC | --- tabbar controller | ---Navigation Controller | --- VC1 需求是从VC1导航回根视图控制器。我们如何才能做到这一点 使用以下

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

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

Root VC
    |
     --- tabbar controller
          |
           ---Navigation Controller
                |
                 --- VC1
需求是从VC1导航回根视图控制器。我们如何才能做到这一点

使用以下代码

- (void) forRootViewCon {
    UINavigationController *nav = (UINavigationController*) self.view.window.rootViewController;
    UIViewController *root = [nav.viewControllers objectAtIndex:0];
    [root performSelector:@selector(returnToRoot)];
}
调用方法名称为返回根

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

[self.navigationController popToRootViewControllerAnimated:YES];
这应该足够了

[self.navigationController popToRootViewControllerAnimated:YES];

应在导航控制器中启用根VC:

---导航控制器--|根VC--tabbar控制器--VC1

然后打电话

[navController popToRootViewControllerAnimated:YES];
编辑:
我想您可能有问题,包括导航控制器中的tabBar控制器?

我使用“展开序列”解决了这些问题

步骤1)你需要的最低要求是为你的目的地视图(又名,一个以前在导航中弹出的视图,你想将其展开)的视图控制器子类化,并向其添加一个类似的方法(方法名称可以是你想要的任何名称,但它应该是唯一的,因为你整个应用程序中的所有展开分段都列在一起):

第2步)现在,在源代码视图(又名,您想要从中释放的视图)中,您只需从按钮或任何东西向下拖动一个片段到源代码视图底部的绿色小“退出”图标。现在应该有一个选项可以连接到“-unwindToViewControllerNameHere”


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

如果您有类似的控制器层次结构

---导航控制器--|根VC--tabbar控制器--导航控制器--VC1

VC1上有一个
ui按钮
,因此单击要移动到根viewcontroller(根VC)的按钮,然后使用:

-(void)moveToRootViewController {

    //Move to root viewController
    UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainnav"];

    self.view.window.rootViewController = controller;

 }
[self.navigationController popToRootViewControllerAnimated:YES]; 
此处
mainnav
是根viewcontroller导航控制器的情节提要标识符

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

如果你有像 ---导航控制器--|根VC--VC1--|--VC2--|

并希望从VC1或VC2移动到根viewcontroller(根VC),然后使用:

-(void)moveToRootViewController {

    //Move to root viewController
    UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainnav"];

    self.view.window.rootViewController = controller;

 }
[self.navigationController popToRootViewControllerAnimated:YES]; 

谢谢你的回答,但是我想知道tabbar控制器中的导航。我认为像NavigationController->tabbar controller->Navigation controller这样的层次结构并不好。苹果不会建议这样做。我在导航控制器中有一个根VC,但我隐藏了它。如何转到根视图?您应该使用一个展开序列来完成此操作。感谢您的回答@rdelmar,我同意您的解决方案。但我现在面临的问题是,我无法将按钮出口连接到情节提要的“退出”按钮以将其展开。它似乎无法接近。你能帮我一下吗?看看我的答案(),看看你是不是这么想的。