故事板有两个独立的流程

时间:2014-01-10 16:21:01

标签: ios cocoa-touch uistoryboard

我的应用要求用户在第一次使用时注册。注册流程有三个用户需要完成的屏幕。

用户完成注册流程后,他会进入应用程序的主UI。

使用故事板处理流量变化的最佳方法是什么?

我最好的猜测是使用两个故事板,一个主故事板和一个注册故事板,然后在运行时检查是否需要注册流并加载注册故事板, 否则加载主故事板。

这是处理两个流程的最佳或最常用的方法吗?如果是,那么在注册流程完成后如何切换到主故事板?

1 个答案:

答案 0 :(得分:3)

您可以在一个故事板中拥有所有内容,并且它可以正常工作。您可以在应用启动期间选择要实例化的视图控制器。

首先,您需要转到目标设置,然后从“主界面”中删除故事板。然后,您需要在应用委托中的application:didFinishLaunchingWithOptions:方法中使用以下代码:

self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];

UIViewController *viewController = nil;

BOOL needsSignUp = //Your check for whether you need to sign in or not here

if (needsSignUp) {
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"SignUpScreen"];
}
else {
    viewController = [storyboard instantiateViewControllerWithIdentifier:@"MainAppScreen"];
}

self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];

这只是在手动实例化故事板后决定从故事板手动实例化哪个视图控制器。您需要将@"SignUpScreen"@"MainAppScreen"替换为情节提要中视图控制器的实际标识符。

确保按照第一步,从目标中的“主界面”中删除故事板,因为这是使其自动实例化故事板并自动选择初始视图控制器的原因,您不再希望它执行此操作。

编辑:

每个视图控制器都有一个对其实例化的故事板的引用,因此当您完成注册并希望显示主应用程序屏幕时,您只需要调用以下行来获取它:

UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"MainAppScreen"];

如果您使用UINavigationController来显示注册屏幕,则可以通过执行以下操作替换视图控制器堆栈:

[self.navigationController setViewControllers:@[viewController] animated:YES];

如果要将主屏幕视图控制器设置为根视图控制器,或将任何其他视图设置为根视图控制器,则可以执行以下操作:

self.view.window.rootViewController = viewController;
相关问题