【问题标题】:Button to Present ViewController After Tutorial (which Loads For 1st Time Only)教程后显示 ViewController 的按钮(仅第一次加载)
【发布时间】:2014-05-29 11:33:11
【问题描述】:

我有一个名为tutorialViewController 的教程ViewController,它只在应用程序首次启动时出现。我就是这样做的:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    BOOL hasRunBefore = [defaults boolForKey:@"FirstRun"];

    if (!hasRunBefore) {
        [defaults setBool:YES forKey:@"FirstRun"];
        self.window.rootViewController = [tutorialViewController new];
        self.window.backgroundColor = [UIColor whiteColor];

// RESideMenu Stuff that Must Be Done

        leftSideMenuViewController *leftMenuViewController = [[leftSideMenuViewController alloc] init];
        rightSideMenuViewController *rightMenuViewController = [[rightSideMenuViewController alloc] init];

        musicPlayerViewController *navigationController = [[homeViewController alloc] init];


        RESideMenu *sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:navigationController
                                                                        leftMenuViewController:leftMenuViewController
                                                                       rightMenuViewController:rightMenuViewController];
        sideMenuViewController.menuPreferredStatusBarStyle = 1;

        sideMenuViewController.delegate = self;
        sideMenuViewController.contentViewShadowColor = [UIColor blackColor];
        sideMenuViewController.contentViewShadowOffset = CGSizeMake(0, 0);
        sideMenuViewController.contentViewShadowOpacity = 0.6;
        sideMenuViewController.contentViewShadowRadius = 12;
        sideMenuViewController.contentViewShadowEnabled = YES;

        self.window.backgroundColor = [UIColor blackColor];

    }

    else
    {
        NSLog (@"Not the first time this controller has been loaded");

        UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[homeViewController alloc] init]];

// RESideMenu Stuff that Must Be Done

        leftSideMenuViewController *leftMenuViewController = [[leftSideMenuViewController alloc] init];
        rightSideMenuViewController *rightMenuViewController = [[rightSideMenuViewController alloc] init];

        RESideMenu *sideMenuViewController = [[RESideMenu alloc] initWithContentViewController:navigationController
                                                                        leftMenuViewController:leftMenuViewController
                                                                       rightMenuViewController:rightMenuViewController];
        sideMenuViewController.menuPreferredStatusBarStyle = 1;

        sideMenuViewController.delegate = self;
        sideMenuViewController.contentViewShadowColor = [UIColor blackColor];
        sideMenuViewController.contentViewShadowOffset = CGSizeMake(0, 0);
        sideMenuViewController.contentViewShadowOpacity = 0.6;
        sideMenuViewController.contentViewShadowRadius = 12;
        sideMenuViewController.contentViewShadowEnabled = YES;
        self.window.rootViewController = sideMenuViewController;

        self.window.backgroundColor = [UIColor blackColor];

    }

到目前为止效果很好 - 如果我第一次加载应用程序,它会显示 tutorialViewController。如果我关闭它并再次打开它,它会显示 homeViewController。

我只想知道如何添加一个 IBAction 将我从 tutorialViewController 带到 homeViewController。目前,我是这样写的:

- (IBAction)goToHomeViewController:(id)sender {

    homeViewController *navigationController = [homeViewController new];

    [self presentViewController:navigationController animated:YES completion:^{
    }];

    NSLog(@"Start button pressed");
}

它显示homeViewController,但不显示导航栏等 - 就像homeViewControllerrootViewController 一样。

这里有更多细节

  • tutorialViewController 不显示状态栏或导航栏。它只是一个占据整个屏幕的滚动视图。
    • 'homeViewControllerhas a navigation bar with a left bar button and right bar button that brings up otherviewControllers`。

我搜索了其他 SO 问题,但它们主要与 Storyboards 相关,我没有使用。只是 .xibs(以及 .h 和 .m)。

如果homeViewControllerrootViewController,我如何从tutorialViewController 呈现homeViewController

【问题讨论】:

    标签: ios iphone objective-c xcode uiviewcontroller


    【解决方案1】:

    在 UINavigationController 中包装 homeViewController 应该可以工作。

    [self presentViewController:[[UINavigationController alloc] initWithRootViewController:homeViewController] animated:YES: completion:nil]
    

    【讨论】:

      【解决方案2】:

      你也可以这样做。

      在您的 'if' 条件下添加 tutorialViewController

      UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:[[tutorialViewController alloc] init]];

      并在goToHomeViewController函数中添加,

       homeViewController *navigationController = [homeViewController new];
      [self.navigation pushViewController:navigationController animated:NO];
      

      所以第一次 tutorialViewController 充当 rootview 控制器,如果你想隐藏 NavigationBar 添加以下代码,

      [[self navigationController] setNavigationBarHidden:YES animated:YES];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-09
        • 2020-06-12
        • 2018-01-12
        • 2020-06-09
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多