如何在swift 3中第一次启动应用程序时导航另一个页面

时间:2018-04-27 07:54:14

标签: ios iphone swift xcode

我正在实施iOS应用。当用户第一次启动应用程序时,我需要导航到另一个页面,从下次开始我需要导航主页。如何在iOS swift中执行此任务?

6 个答案:

答案 0 :(得分:0)

这可以使用userdefaults来实现。只需创建一个像SplashViewController这样的新控制器,它只会重定向到所需的ViewController。

import UIKit

class SplashViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        decideWhichScreenToShow()
    }

    // This logic will do
    func decideWhichScreenToShow(){
        if !UserDefaults.standard.bool(forKey: "your_key"){
            // This will execute first time, in that controller's viewDidLoad() make this true
        }else{

        }
    }
}

您可以在Appdelegate中编写相同的逻辑。

答案 1 :(得分:0)

使用this link&创建用于检查UserDefaults中的密钥是否存在的func然后检查是否......其他

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    if isKeyPresentInUserDefaults(key: "isFirstTime") {
        let home = HomeVC()
        window?.rootViewController = home
    } else {
        let login = LoginVC()
        window?.rootViewController = login
        UserDefaults.standard.set(true, forKey: "isFirstTime")
    }

    return true
}

func isKeyPresentInUserDefaults(key: String) -> Bool {
    return UserDefaults.standard.object(forKey: key) != nil
}

答案 2 :(得分:0)

您可以使用更改AppDelegate中的didFinishLaunchingWithOptions方法来实现此目的。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    self.window = UIWindow(frame: UIScreen.main.bounds)
    guard let firstTime = UserDefaults.standard.object(forKey: "IsFirstTime")  else {
        UserDefaults.standard.set(true, forKey: "IsFirstTime")
        let storyBoard = UIStoryboard.init(name: "FirstStoryBoard", bundle: nil)
        let initialVc = storyBoard.instantiateViewController(withIdentifier: "FirstControllerId") as! FirstTimeViewController
        self.window?.rootViewController = initialVc
        self.window?.makeKeyAndVisible()
        return true
    }
    let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
    let initialVc = storyBoard.instantiateViewController(withIdentifier: "NormalInitialController") as! ViewController
    self.window?.rootViewController = initialVc
    self.window?.makeKeyAndVisible()
    return true

}

检查UserDefaults中是否存在密钥“IsFirstTime”的值。如果应用程序是第一次启动,则不会有值。 在这种情况下,您可以启动FirstTimeViewController并将值设置为UserDefaults中的键。

如果UserDefaults中存在一个值,只需启动正常的ViewController。

答案 3 :(得分:0)

试试这个:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {


    if firstTime = UserDefaults.standard.object(forKey: "firstTime")
    {
        let storyboard = UIStoryboard(name: "SecondStoryBoard", bundle: nil)
        let MainView = storyboard.instantiateViewController(withIdentifier: "SecondTimeViewController") as! SecondTimeViewController

        let navController = UINavigationController.init(rootViewController: MainView)

        self.window?.rootViewController = navController

    }
    else
    {
        UserDefaults.standard.set(true, forKey: "firstTime")

        let storyboard = UIStoryboard(name: "FirstStoryBoard", bundle: nil)
        let MainView = storyboard.instantiateViewController(withIdentifier: "FirstTimeViewController") as! FirstTimeViewController

        let navController = UINavigationController.init(rootViewController: MainView)

        self.window?.rootViewController = navController

    }

}

答案 4 :(得分:0)

以下针对此常见问题的解决方案假设

  1. 一开始 - 在这个例子中,那是在用户默认值中设置"username"键之前 - 我们想要启动到故事板的初始视图控制器(用户应该设置的位置) "username"密钥)。

  2. 此后,我们始终要启动故事板中的不同的视图控制器,此示例中的标识符为"root"

  3. 它非常简短!

    class AppDelegate: UIResponder, UIApplicationDelegate {
        var window: UIWindow?
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
            if let rvc = self.window?.rootViewController {
                if UserDefaults.standard.object(forKey:"username") as? String != nil {
                    self.window!.rootViewController = rvc.storyboard!.instantiateViewControllerWithIdentifier("root")
                }
            }
            return true
        }
    }
    

答案 5 :(得分:0)

已更新:如果出现此错误:“ 类型'AppDelegate'的值没有成员'window'”。

答案是:您必须在SceneDelegate.swift中编写代码

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    let defaults = UserDefaults.standard


    guard  let a=UserDefaults.standard.object(forKey: "wantOverview")  else {



        let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
          let initialVc = storyBoard.instantiateViewController(withIdentifier: "firstTimeViewController") as! firstTimeViewController
          self.window?.rootViewController = initialVc
          self.window?.makeKeyAndVisible()


          defaults.set(false, forKey: "wantOverview")
        return
      }


      let storyBoard = UIStoryboard.init(name: "Main", bundle: nil)
            let initialVc = storyBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
            self.window?.rootViewController = initialVc
            self.window?.makeKeyAndVisible()

    guard let _ = (scene as? UIWindowScene) else { return }
}