你如何创build一个只在第一次出现的教学屏幕(在Swift中)

我有一个简单的方法来将用户路由到视图控制器只有一次? 这个ViewController可以成为用户在启动时只看到一次的指导性屏幕。 我现在有这个:

let skipScreen = NSUserDefaults.standardUserDefaults() @IBAction func skipButton(sender: AnyObject) { let skipNow = true skipScreen.setObject(skipNow, forKey: "skip") skipScreen.synchronize() } func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject :AnyObject]?) -> Bool { self.window = UIWindow(frame: UIScreen.mainScreen().bounds) var storyboard = UIStoryboard(name: "Main", bundle: nil) var initialViewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as UIViewController self.window?.rootViewController = initialViewController self.window?.makeKeyAndVisible() } override func viewDidLoad() { super.viewDidLoad() var skipNow: Bool? = skipScreen.objectForKey("skip") as Bool? if skipScreen.boolForKey("skip") == true{ var nav = self.view?.rootViewController as UINavigationController var storyBoard = UIStoryboard(name: "Main", bundle: nil) nav.pushViewController(storyBoard.instantiateViewControllerWithIdentifier("BookingViewController") as BookingViewController, animated: false) } } 

但它给self.window部分的错误,并说viewController没有名为“窗口”的成员

我怎么能做这个工作?

谢谢!

我build议创build教程/ insturctional屏幕将创build图像(全屏)不透明度的背景颜色和文字完全可见。 处理显示NSUserDefaults(显示一个屏幕后,将其保存为用户默认值,以便下一次您不应该显示该特定图像时)。

不要忘记为所有屏幕创build图片(对于iPhone:4,5,6,6+)

你需要检查你的appdelegate的didFinishLaunchingWithOptions方法,可以说你的userdefaults中有一个布尔值,这表示你是否应该从“instructional”viewcontroller或普通的viewcontroller开始。 因此,您可以将instrucitonal viewcontroller设置为故事板中的默认视图控制器,如果已经显示,则可以推送“非指示性”视图控制器。

  if userDefaults.boolForKey("HasBeenShownInstructions") { var nav = self.window?.rootViewController as UINavigationController var storyBoard = UIStoryboard(name: "Main", bundle: nil) nav.pushViewController(storyBoard.instantiateViewControllerWithIdentifier("BookingViewController") as BookingViewController, animated: false) } 

不要忘了在用户closures/结束指令时将布尔值保存到userdefaults。

这只是解决问题的众多方法之一。 你也可以反过来做。 取决于你需要什么。