如何使用情节提要以编程方式更改根视图控制器



我在xcode中使用storyBoards,我正在制作一个alertView,它将充当免责声明。当按下所选按钮(是/否)时,我想切换并保存rootViewController。我的意思是,当按下 yes 时,我希望下次启动应用程序时使用不同的 rootViewController 启动。但是,如果在使用情节提要时,rootViewController 由主故事板中的箭头指定,我该如何执行此操作?提前谢谢你

您可以设置一个cookie(例如使用NSUserDefaults),告诉您需要从不同的视图控制器开始。然后在您的应用程序委托中,您可以检查此 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,则情节提要中设置的 rootViewController 将是初始序列图像板。

因此,在单击按钮的操作中,您可以添加:

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

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

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

ps:我知道这个问题很久以前就被问过了,但由于没有可接受的答案,下一个开发人员寻找这个答案还为时不晚;-)

我这样做的方法是,在RootViewController viewDidLoad方法中,我检查类似的条件。

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

如果他们在 RootViewController 的 viewDidLoad 中执行 segue 到您希望在应用程序启动时将它们带到的 viewController。

此 segue 将在任何内容出现在屏幕上之前发生,因此用户会认为应用程序已直接启动到新屏幕。

另外,现在你弹出到RootViewController方法将带你到错误的屏幕。 所以看看放松行动。 这是一种可以返回到堆栈中任何位置的视图控制器的方法,而无需执行多次弹出。

如果您需要,我可以找到有关放松操作的更多信息的链接。

通常,不能在情节提要中重用视图或视图控制器。 它们是连接到 awakeFromNIB 中的代码的静态表示形式。

即使想要将不同的视图控制器连接到情节提要中的视图,也不能。 出于同样的原因,我假设也无法更改故事板中的rootViewController。

故事板是很好的抽象,但是,在它们下面是一个普通的旧笔尖,如果您希望灵活地将任何VC编码到任何视图,并替换rootViewController,则需要创建另一个包含这些视图的笔尖,因为故事板将不允许您即时重新配置它。

最新更新