如何使用Storyboard以编程方式更改rootViewController?

时间:2012-09-24 07:33:57

标签: ios xcode storyboard rootview

我在xcode中使用storyBoards,我正在制作一个alertView作为免责声明。当按下所选按钮时(是/否)我想切换并保存rootViewController。我的意思是,当按下yes时,我希望下次启动应用程序以使用不同的rootViewController启动。但是,如果在使用故事板时,如何通过MainStoryBoard中的箭头指定rootViewController,我该怎么办呢?提前谢谢你

3 个答案:

答案 0 :(得分:2)

您可以设置一个cookie(例如使用NSUserDefaults),告诉您需要从另一个视图控制器启动。然后在您的app委托中,您可以检查此cookie值并更改故事板的初始视图控制器,如

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Register User Defaults Values
[[NSUserDefaults standardUserDefaults] registerDefaults:@{@"tutorial_already_displayed":@NO}];

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"tutorial_already_displayed"] == NO)
{
    UIStoryboard*       storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
    UIViewController*   rootViewController = [storyboard instantiateViewControllerWithIdentifier:@"Tutorial"];
    self.window.rootViewController = rootViewController;
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"tutorial_already_displayed"];
}

return YES;
}

如果未更改rootViewController,则故事板中设置的那个将是初始设置。

因此,在点击按钮时,您可以添加:

[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"tutorial_already_displayed"];

因此教程将显示为第一个视图控制器

希望它有所帮助!祝你好运。

ps:我知道很久以前就已经问过这个问题,但由于没有可接受的答案,对于寻找这个答案的下一个开发者来说还不算太晚; - )

答案 1 :(得分:1)

我这样做的方法是在RootViewController viewDidLoad方法中检查类似的情况。

您可以检查用户是否已接受条款等...(将其存储在NSUserDefaults或其他内容中)

如果他们已经在RootViewController的viewDidLoad中执行segue到viewController,你想在应用启动时将它们带到。

这个segue将在任何内容进入屏幕之前发生,因此用户会认为该应用已直接启动到新屏幕。

另外,现在你的popToRootViewController方法会把你带到错误的屏幕。所以看看展开动作。这是一种可以在堆栈中的任何位置返回viewController而无需执行多次弹出的方法。

如果您需要,我可以找到一个链接,其中包含有关展开动作的更多信息。

答案 2 :(得分:1)

通常,您无法在故事板中重复使用视图或视图控制器。它们是与awakeFromNIB中的代码相关联的静态表示。

即使您想将不同的视图控制器连接到故事板中的视图,也无法进行。我认为由于同样的原因,它也无法在故事板中更改rootViewController。

故事板是很好的抽象,但是,它们下面是一个普通的旧笔尖,如果你想要将任何VC编码到任何视图的灵活性,并替换你的rootViewController,你需要创建另一个包含那些视图的笔尖,如故事板不允许您动态重新配置它。