【问题标题】:Changing View Controllers on startup在启动时更改视图控制器
【发布时间】:2014-05-10 15:50:01
【问题描述】:

当我的应用第一次启动时,我希望它被定向到 SettingsViewController 并且在下次启动时,我希望它被定向到 MainViewController

我没有使用 XIB 文件,我使用的是故事板 XCODE 5.1 和 iOS7。

我怎样才能做到这一点?

【问题讨论】:

  • 在 nsuserdefaults 中存储一个标志以知道这是第一次。在 viewdidapear 中,您可以执行 if(firsttime)、推送或展示您的设置 vc

标签: ios objective-c uiviewcontroller xcode5


【解决方案1】:

其他建议会起作用并且可能是正确的,但是当我过去这样做时,当应用程序第一次打开时它看起来很乱,并且你会得到一个即时推送动画。

您可以做的是在 AppDelegate 中切换根视图控制器,以便用户在首次启动时看不到任何导航,您的设置将显示,当它们完成设置后,对您的主视图控制器执行模态 segue .

对我来说它看起来更好。像这样的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if ( ![[NSUserDefaults standardUserDefaults] boolForKey:@"SettingsShown"] )
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SettingsShown"];
        [[NSUserDefaults standardUserDefaults] synchronize];
        self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:@"SettingsViewController"];
    }

    return YES;
}

故事板设置:

【讨论】:

    【解决方案2】:

    情节提要中的入口点应该是ViewDidLoad 中的MainViewController,它会检查设置是否丢失,它会检查PerformSegue 到settingsViewController。

    另外,让用户选择通过按钮或其他方式返回设置也是一个好主意。

    【讨论】:

      【解决方案3】:

      这不是问题,你应该在你的appDelegatedidFinishLaunchingWithOptions中做, 在您第一次为设置准备好ForSegue 时,您可以在任何地方存储一个值(文件、NSUserDefaults),以记住您已经在同一个 appDelegate 上添加了一个 if 来检查该值。

      这个方法:

      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

      用这个来设置:

      [[NSUserDefaults standardUserDefaults] setObject:variable forKey:@"variable"];
      [[NSUserDefaults standardUserDefaults] synchronize];
      

      然后得到:

      [[NSUserDefaults standardUserDefaults] stringForKey:@"yourVariable"]
      

      任务完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多