我有一种简单的方法可以将用户一次路由到一个视图控制器吗?然后,此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没有名为' window'
我怎么能让这个工作?
谢谢!
答案 0 :(得分:3)
我建议创建教程/安装屏幕的建议是创建不透明背景颜色和文本完全可见的图像(全屏)。使用NSUserDefaults显示句柄(显示一个屏幕后,将其保存为用户默认值,以便下次知道您不应该显示该特定图像)。
不要忘记为所有屏幕创建图片(适用于iPhone:4,5,6,6 +)
答案 1 :(得分:2)
你需要检查你的appdelegate的didFinishLaunchingWithOptions
方法,比如你的userdefaults中的一个布尔值,这表明你应该从一个“指导”的viewcontroller或普通的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)
}
当用户解散/结束说明时,别忘了将布尔值保存到userdefaults。
这只是解决问题的众多方法之一。你也可以反过来做。取决于你需要什么。