从ViewController重新定义rootViewController

时间:2013-06-06 15:18:01

标签: ios objective-c uitabbarcontroller

我在应用程序第一次运行时创建了一个具有向导的应用程序。 之后,它应该呈现一个UITabBarController。

用户第二次运行应用程序时,它应该只显示UITabBarController。

由于UITabBarController应该是rootViewController,有没有办法重新定义应用程序rootViewController,所以当向导结束时,TabBarController出现了?

或者有更好的方法来实现这种行为吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用unwind segue。在展示您的应用程序时,将UITabBarController推送到导航堆栈。如果这是您的应用程序的第一次运行,请在按下选项卡栏控制器时禁用动画,然后在其顶部按下向导的第一个屏幕。如果不是第一次运行,请使用动画推动标签栏控制器。

当用户完成向导完成后,使用展开segue返回标签栏控制器。

答案 1 :(得分:1)

是的,您可以从当前显示的任何控制器重新定义窗口的根视图控制器。您可以使用self.view.window获取对窗口的引用。因此,当向导结束时,只需实例化标签栏控制器并更改根目录:

UITabBarController *tbc = [self.storyboard instantiateViewControllerWithIdentifier:@"tbc"]; // or other instantiation method if not using a storyboard
self.view.window.rootViewController = tbc;

在app delegate中,输入逻辑以确定这是否是第一次运行应用程序,如果没有,请运行此略微修改的代码以直接启动标签栏控制器:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UITabBarController *tbc = [sb instantiateViewControllerWithIdentifier:@"tbc"]; // or other instantiation method if not using a storyboard
self.window.rootViewController = tbc;