ios - 根据条件设置rootViewController

标签 ios swift

我目前正在使用 Swift 在 Xcode 7.2、iOS 9.2 中开发一个应用程序。我希望用户第一次打开应用程序时弹出一个屏幕并获取一些数据并将其永久存储。我发现一个帖子,有人问了类似的问题:Programmatically set the initial view controller using Storyboards已严格遵循说明,但我似乎无法让它按照我想要的方式工作。

这是我的 AppDelegate.swift 文件中修改后的代码。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds);
    let storyboard = UIStoryboard(name: "Main", bundle: nil);
    var initialViewController: UIViewController;
    print(NSUserDefaults.standardUserDefaults().boolForKey("firstTime"));
    if(!NSUserDefaults.standardUserDefaults().boolForKey("firstTime")){
        initialViewController = storyboard.instantiateViewControllerWithIdentifier("FirstTimeScreen");
    } else {
        initialViewController = storyboard.instantiateViewControllerWithIdentifier("Dashboard");
    }
    self.window?.rootViewController = initialViewController;
    self.window?.makeKeyAndVisible();
    return true
}

在与第二次打开的 ViewController 对应的 ViewController.swift 文件中,在 viewDidLoad() 方法中,我有以下代码行:

NSUserDefaults.standardUserDefaults().setBool(false, forKey: "firstTime");

目前第一个屏幕始终打开。即使测试了 NSUserDefaults 值,从第二次开始的屏幕也应该不是 Root View Controller 。

我在单个 View Controller 上启动了应用程序,目前我没有任何导航 Controller 或任何东西。只是一堆单独的 View Controller ,通过按钮连接连接。

感谢您花时间阅读本文并回答问题。

最佳答案

尝试在didFinishLaunchingWithOptions中设置firstTime

    if(NSUserDefaults.standardUserDefaults().objectForKey("firstTime") == nil){
        initialViewController = storyboard.instantiateViewControllerWithIdentifier("FirstTimeScreen");
        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "firstTime");
        NSUserDefaults.standardUserDefaults().synchronize()
    } else {
        initialViewController = storyboard.instantiateViewControllerWithIdentifier("Dashboard");
    }

关于ios - 根据条件设置rootViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34476934/

相关文章:

ios - 具有错误的 IndexPath 影响的 UITableViewCells 和动画坐标问题

arrays - 如何从数组中删除特定对象?

swift - iOS自定义按钮无法及时检测到触摸

swift - 使用 Storyboard 中的 View 将其框架用于以编程方式设置的另一个 View

ios - 通过电子邮件注册用户接受重复的电子邮件(firebase-swift)

iOS NSUserDefaults standardUserDefaults

ios - AVPlayer开始播放后立即寻找

iOS光学字符识别——网格中的字符

ios - 在启用 ARC 的项目中导入非 ARC 代码编译的 .a 文件

swiftyjson - 调用可以抛出,但它被标记为 'try' 并且错误未被处理