使用Pageviewcontroller教程后的导航控制器

时间:2014-07-08 10:00:06

标签: ios objective-c storyboard

我正在使用pageViewController来展示我应用的所有功能。但是我只想在应用程序的第一次启动时显示它而不是每次都显示它。为了,我创建了一个存储布尔值的对象来显示或不显示教程。此布尔值在AppDelegate.m

中使用
if(tutoStatus == NO)
    {

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

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

        UIViewController *tutoViewController = [storyboard instantiateViewControllerWithIdentifier:@"ViewController"];

        UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:tutoViewController];

        [self.window setRootViewController:navController];

        [Tutorial setTutoStatus:YES];
        [Tutorial savePrefs];
    }

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

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

        UIViewController *homeViewController = [storyboard instantiateViewControllerWithIdentifier:@"homeViewController"];

        UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:homeViewController];

        [self.window setRootViewController:navController];
    }

我的问题是我在两种情况下都创建了一个导航控制器。因此,如果我有要显示的教程,用户将在导航栏中获得一个后退按钮,并且可以返回到PageViewController。在应用程序开始时显示教程的最佳方法是什么?

由于

- 编辑

我使用下面的代码解决了我的问题

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

    if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
    {
        NSLog(@"not first launch");

        UIStoryboard* storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                      bundle:nil];
        self.homeViewController = [storyBoard instantiateViewControllerWithIdentifier:@"HomeViewController"];
        self.window.rootViewController = self.self.homeViewController;
    }
    else
    {
        NSLog(@"first launch");
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        UIStoryboard* storyBoard = [UIStoryboard storyboardWithName:@"MainStoryboard"
                                                             bundle:nil];
        self.tutoViewController = [storyBoard instantiateViewControllerWithIdentifier:@"TutoViewController"];
        self.window.rootViewController = self.tutoViewController;
    }

    [self.window makeKeyAndVisible];

2 个答案:

答案 0 :(得分:1)

在本教程的视图控制器的viewWillAppear:方法中,您可以使用它来隐藏后退按钮:

[self.navigationItem setHidesBackButton:YES animated:YES];

然后在viewDidDisappear:中,您可以恢复后退按钮:

[self.navigationItem setHidesBackButton:NO animated:YES];

答案 1 :(得分:0)

删除UIpageViewController的导航控制器&通过调用presentViewController:animated:completion:

以模态方式显示PageViewController

此外,如果您只想在应用程序的首次启动时显示教程,则可能需要使用 NSUserDefaults 来存储bool。

此链接中的内容 - > Show screen on first launch only in iOS