简介
我目前在我的项目中使用Storyboard,其中一个是在pageView控制器中设置的应用程序教程,第二个是实际应用程序的故事板。目前,该教程仅出现在初始应用程序启动时(如预期的那样),但实际上我必须 kill 该应用程序,并且重新打开它以显示主应用程序视图。
尝试(S)
我已尝试以编程方式在教程的 工作的pageView控制器中加载主应用程序的viewController,但绝不是流畅或优雅的。我这样做的方式类似于我发布的代码here
问题
我将如何在两个Storyboard viewControllers之间进行流畅转换?什么是最适合他们之间转换的方式?我应该阅读哪些文件?提前谢谢!
答案 0 :(得分:0)
我建议像往常一样展示你的主视图,并(在第一次发布时)以模态方式呈现你的教程视图。这是一种清晰的互动模式;演示动画和的消除动画对用户都有意义。
或者,您可以以模态方式呈现教程视图,并使用animate:NO来防止可能的尴尬过渡。
代码相当简单。只需像往常一样加载主视图,然后在适当的时候显示模态视图:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Load main view
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainScreen" bundle:nil];
UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"firstView"]; // determine the initial view controller here
self.window.rootViewController = viewController;
[self.window makeKeyAndVisible];
if (self.isFirstLaunch)
{
// Display tutorial
UIStoryboard *tutorialStoryboard = [UIStoryboard storyboardWithName:@"MainScreen" bundle:nil];
UIViewController *tutorialViewController = [tutorialStoryboard instantiateViewControllerWithIdentifier:@"firstTutorialView"];
[self.window.rootViewController presentViewController:tutorialViewController animated:NO completion:nil];
}
}
答案 1 :(得分:-1)
在这种情况下,您会遇到有关从视图控制器(root)呈现模态视图控制器(教程)的问题,该控制器尚未显示和加载。 我使用rootViewController的直接替换:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
if (self.isFirstLaunch) {
UIStoryboard *tutorialStoryboard = [UIStoryboard storyboardWithName:@"Tutorial" bundle:nil];
self.window.rootViewController = [tutorialStoryboard instantiateInitialViewController];
} else {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainScreen" bundle:nil];
self.window.rootViewController = [mainStoryboard instantiateInitialViewController];
}
[self.window makeKeyAndVisible];
return YES;
}
- (void)closeTutorial
{
// This is solution without animation
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainScreen" bundle:nil];
self.window.rootViewController = [mainStoryboard instantiateInitialViewController];
// This is solution with animation
[self.window.rootViewController presentViewController:[mainStoryboard instantiateInitialViewController] animated:YES completion:nil];
}