如何通过 swift 代码更改初始视图控制器

How to change the initial view controller through swift code

我正在开发一个初始视图控制器为 "Navigation controller" 的应用程序。该应用程序包含 2 个要实施的想法。

1) 从RegisterViewController中,用户必须注册手机号码验证//从短信或电话,验证后进入HomeViewController(条件:当用户第一次安装应用程序时,它显示RegisterViewController )

2) 如果应用程序已经安装到 iPhone 并且用户还注册了手机号,那么用户现在打开相同的应用程序 initialViewController 必须是 HomeViewController

如何通过swift代码实现这个想法?

您必须更改 rootViewController 而不是 initialViewController。当用户验证并进入 NSUserDefaults 中的 HomeViewController 存储标志时,然后每次 AppDelegate didFinishLaunchingWithOptions 检查用户是否已使用 NSUserDefaults.

进入 HomeViewController
let appdelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var homeViewController = mainStoryboard.instantiateViewControllerWithIdentifier("HomeViewController") as! HomeViewController
let nav = UINavigationController(rootViewController: homeViewController)
appdelegate.window!.rootViewController = nav

喜欢

  var viewController: UIViewController!


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {


self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    if NSUserDefaults.standardUserDefaults().objectForKey("notRegistered") == nil
    {
        viewController = storyboard.instantiateViewControllerWithIdentifier("RegisterViewController")
    }
    else {

        if NSUserDefaults.standardUserDefaults().objectForKey("notRegistered") as! String == "registred"
        {
             viewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController")
        }
        else
        {
            viewController = storyboard.instantiateViewControllerWithIdentifier("RegisterViewController")
        }
      // if you want to create the UINavigationController use this
        let nav = UINavigationController(rootViewController: viewController)
        self.window!.rootViewController = nav

      else directly access use this
        self.window!.rootViewController = viewController


self.window.makeKeyAndVisible()
// Override point for customization after application launch.
return true
}

成功后在注册页面保存赞

//Save
NSUserDefaults.standardUserDefaults().setObject("registred", forKey: "notRegistered")

在你的 appdelegate 中实现这个逻辑 class:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let isRegistered = NSUserDefaults.standardUserDefaults().boolForKey("ALLREADY_REGISTER")

        if isRegistered == true{
            // implement home view controller
            let homeViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("HomeVC") as! HomeViewController
            self.window?.rootViewController = homeViewController
            self.window?.makeKeyAndVisible()

        }else{
            // implement register view controller
            let registerViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("RegisterVC") as! RegisterViewController
            self.window?.rootViewController = registerViewController
            self.window?.makeKeyAndVisible()
        }

                return true
    }

然后当第一次注册成功完成时然后为键设置 bool 变量 true ALLREADY_REGISTER

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "ALLREADY_REGISTER")`