如何将应用程序的教程故事板链接到主应用程序?

时间:2014-12-06 18:03:11

标签: ios objective-c xcode uiviewcontroller

简介
我目前在我的项目中使用Storyboard,其中一个是在pageView控制器中设置的应用程序教程,第二个是实际应用程序的故事板。目前,该教程仅出现在初始应用程序启动时(如预期的那样),但实际上我必须 kill 该应用程序,并且重新打开它以显示主应用程序视图。

尝试(S)
我已尝试以编程方式在教程的 工作的pageView控制器中加载主应用程序的viewController,但绝不是流畅或优雅的。我这样做的方式类似于我发布的代码here

问题
我将如何在两个Storyboard viewControllers之间进行流畅转换?什么是最适合他们之间转换的方式?我应该阅读哪些文件?提前谢谢!

2 个答案:

答案 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];
}