如何使 uiviewcontroller 在应用程序的第一个 运行 期间仅可见一次(例如教程)?
how can I make the uiviewcontroller visible only once during first run of the app (e.g. tutorial)?
我正在创建一个 iOS swift
应用程序,我想在用户 运行 首次使用该应用程序时显示教程屏幕。稍后,应用程序的每个 运行 教程应该被隐藏,另一个视图控制器应该是可见的作为起点。到目前为止,我的故事板看起来像这样:
它包含两个屏幕的教程(第一个和最后一个)和标签栏(这是我的应用程序的主要 window)。
至于现在,在情节提要中我选择了标签栏作为初始视图控制器:
采用这种方法,教程屏幕就再也看不到了。我如何才能在第一次启动应用程序时只显示一次,然后在用户每次打开应用程序时跳过它?
在 AppDelegate
的 didFinishLaunchingWithOptions
方法中,像这样检查 NSUserDefaults
值。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.objectForKey("isFirstTime") == nil {
defaults.setObject("No", forKey:"isFirstTime")
let storyboard = UIStoryboard(name: "main", bundle: nil) //Write your storyboard name
let viewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
self.window.rootViewController = viewController
self.window.makeKeyAndVisible()
}
return true
}
注意: 我已经创建了 ViewController
的对象,您需要创建 FirstPage 教程屏幕的对象,然后将其分配给 rootViewController
.
对于 swift 4 进行这些更改。
let defaults = UserDefaults.standard
if defaults.object(forKey: "isFirstTime") == nil {
defaults.set("No", forKey:"isFirstTime")
defaults.synchronize()
...
}
此答案的简化 Swift 4 版本。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
if !UserDefaults.standard.bool(forKey: "didSee") {
UserDefaults.standard.set(true, forKey: "didSee")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController")
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
}
return true
}
添加这个是Scene Delegate
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if UserDefaults.standard.bool(forKey: "introLaunched") == false{
UserDefaults.standard.set(true, forKey: "introLaunched")
let storyboard = UIStoryboard(name: "Main", bundle: .main)
let vc = storyboard.instantiateViewController(identifier: "IntroScreenViewController") as! IntroScreenViewController
self.window?.rootViewController = UINavigationController(rootViewController: vc)
} else {
let storyboard = UIStoryboard(name: "Main", bundle: .main)
let vc = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.window?.rootViewController = UINavigationController(rootViewController: vc)
}
}
我正在创建一个 iOS swift
应用程序,我想在用户 运行 首次使用该应用程序时显示教程屏幕。稍后,应用程序的每个 运行 教程应该被隐藏,另一个视图控制器应该是可见的作为起点。到目前为止,我的故事板看起来像这样:
它包含两个屏幕的教程(第一个和最后一个)和标签栏(这是我的应用程序的主要 window)。
至于现在,在情节提要中我选择了标签栏作为初始视图控制器:
采用这种方法,教程屏幕就再也看不到了。我如何才能在第一次启动应用程序时只显示一次,然后在用户每次打开应用程序时跳过它?
在 AppDelegate
的 didFinishLaunchingWithOptions
方法中,像这样检查 NSUserDefaults
值。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
let defaults = NSUserDefaults.standardUserDefaults()
if defaults.objectForKey("isFirstTime") == nil {
defaults.setObject("No", forKey:"isFirstTime")
let storyboard = UIStoryboard(name: "main", bundle: nil) //Write your storyboard name
let viewController = storyboard.instantiateViewControllerWithIdentifier("ViewController") as! ViewController
self.window.rootViewController = viewController
self.window.makeKeyAndVisible()
}
return true
}
注意: 我已经创建了 ViewController
的对象,您需要创建 FirstPage 教程屏幕的对象,然后将其分配给 rootViewController
.
对于 swift 4 进行这些更改。
let defaults = UserDefaults.standard
if defaults.object(forKey: "isFirstTime") == nil {
defaults.set("No", forKey:"isFirstTime")
defaults.synchronize()
...
}
此答案的简化 Swift 4 版本。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
if !UserDefaults.standard.bool(forKey: "didSee") {
UserDefaults.standard.set(true, forKey: "didSee")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "YourViewController")
self.window?.rootViewController = viewController
self.window?.makeKeyAndVisible()
}
return true
}
添加这个是Scene Delegate
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let _ = (scene as? UIWindowScene) else { return }
if UserDefaults.standard.bool(forKey: "introLaunched") == false{
UserDefaults.standard.set(true, forKey: "introLaunched")
let storyboard = UIStoryboard(name: "Main", bundle: .main)
let vc = storyboard.instantiateViewController(identifier: "IntroScreenViewController") as! IntroScreenViewController
self.window?.rootViewController = UINavigationController(rootViewController: vc)
} else {
let storyboard = UIStoryboard(name: "Main", bundle: .main)
let vc = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.window?.rootViewController = UINavigationController(rootViewController: vc)
}
}