簡體   English   中英

在應用程序的第一次運行(例如教程)期間,如何使 uiviewcontroller 僅可見一次?

[英]how can I make the uiviewcontroller visible only once during first run of the app (e.g. tutorial)?

我正在創建一個 iOS swift應用程序,我想在用戶第一次運行該應用程序時顯示教程屏幕。 稍后,隨着應用程序的每次運行,教程應該被隱藏,另一個視圖控制器應該作為起點可見。 到目前為止,我的故事板看起來像這樣:

在此處輸入圖片說明

它包含兩個屏幕的教程(第一個和最后一個)和標簽欄(這是我的應用程序的主窗口)。

至於現在,在故事板中,我選擇標簽欄作為初始視圖控制器:

在此處輸入圖片說明

使用這種方法,永遠不會看到教程屏幕。 如何在首次啟動應用程序時只顯示一次,然后在每次用戶打開應用程序時跳過它?

didFinishLaunchingWithOptions方法AppDelegate檢查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的對象,您需要在將它分配給rootViewController之后創建 FirstPage 教程屏幕的對象。

對於 swift 4 進行這些更改。

let defaults = UserDefaults.standard
if defaults.object(forKey: "isFirstTime") == nil {
    defaults.set("No", forKey:"isFirstTime")
    defaults.synchronize()
    ...
}

此答案的簡化 Swift 4 版本。

https://stackoverflow.com/a/39353299/1565913

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
}

添加這是場景委托

func 場景(_ 場景:UIScene,willConnectTo 會話:UISceneSession,選項 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)
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM