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

时间:2013-11-20 14:00:01

标签: ios iphone objective-c cocoa uistoryboard

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

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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

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

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

的选项

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

答案 1 :(得分:2)

如果你有像

这样的控制器层次结构

---导航控制器 - |根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是根视图控制器导航控制器的故事板标识符。

ViewControllers hierarchy

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

如果您有层次结构 ---导航控制器 - |根VC | --- VC1 ---- | --- VC2 ---- |

并希望从VC1或VC2转移到root viewcontroller(Root VC),然后使用:

[self.navigationController popToRootViewControllerAnimated:YES]; 

答案 2 :(得分:0)

使用以下代码

- (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];

答案 3 :(得分:0)

这应该足够了。

[self.navigationController popToRootViewControllerAnimated:YES];

答案 4 :(得分:0)

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

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

然后致电

[navController popToRootViewControllerAnimated:YES];

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