我目前正在使用 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/