我的应用程序要求用户在第一次使用它时注册。注册流程有三个屏幕,用户需要完成。
当用户完成注册流程后,他将进入应用程序的主用户界面。
用故事板处理流程变化的最佳方法是什么?
我的最佳猜测是使用两个故事板,一个主故事板和一个注册故事板,然后在运行时,检查是否需要注册流程并加载注册故事板,否则加载主故事板。
这是处理两个流的最好或最常见的方法吗?如果是的话,在注册流完成后如何切换到主故事板?
发布于 2014-01-10 16:39:32
你可以把所有的东西都放在一个故事板里,它会很好的工作。您可以选择在应用程序启动期间要实例化哪个视图控制器。
首先,您需要转到目标的设置,并从上面写着“主界面”的地方移除情节提要。然后,您将希望在应用程序委托中的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;
https://stackoverflow.com/questions/21049286
复制相似问题