ios - 如何使用 UserDefaults 快速实现登录/注销导航?

标签 ios swift

** strong text **每次运行应用程序时,我都必须登录才能进入应用程序的主页。

当我点击登录按钮直到点击注销按钮时,如何存储 session 。

这样,我就可以避免每次运行应用程序时登录。

请帮帮我......

其他解决方案不起作用。

class LoginViewController: UIViewController {

    @IBOutlet weak var password: UITextField!
    @IBOutlet weak var loginName: UITextField!

   @IBAction func submitButton(_ sender: Any) {

  UserDefaults.standard.set(true, forKey: "isLoggedIn")

        if loginName.text == "test" && password.text == "test" {

            UserDefaults.standard.set(true, forKey: "status")
            Switcher.updateRootVC()

        }
        else{
            print("Invalid credentials")
        }
    }
}

class ProfileViewController: UIViewController {

@IBAction func submitButton(_ sender: Any) {

    UserDefaults.standard.set(false, forKey: "status")
    Switcher.updateRootVC()

    }

}
class AppDelegate: UIResponder, UIApplicationDelegate {


  var window: UIWindow?

    func loadBaseController() {
       let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
       guard let window = self.window else { return }
       window.makeKeyAndVisible()
       if UserDefaults.standard.bool(forKey: "isLoggedIn") == false {
           let loginVC: ViewController = storyboard.instantiateViewController(withIdentifier: "login") as! ViewController
           self.window?.rootViewController = loginVC
       } else {
           let homeVC: HomeViewController = storyboard.instantiateViewController(withIdentifier: "showData") as! HomeViewController
           let navigationHomeVC = UINavigationController(rootViewController: homeVC)
           self.window?.rootViewController = navigationHomeVC
       }
      self.window?.makeKeyAndVisible()
    }


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

       self.loadBaseController()

        return true

    }
}

我引用了此链接的相同方法https://medium.com/@paul.allies/ios-swift4-login-logout-branching-4cdbc1f51e2c但它没有用,因为我没有得到预期的结果。
我是正确的状态代码,但不是正确的 View Controller 。 请帮我解决这个问题......

在给定的链接中,它将 TabbarVc 添加到 tabor

最佳答案

在 Xcode 11 中,我们创建新项目时有 2 个文件,因此如果您想从委托(delegate)文件更改 rootViewController,则需要从 SceneDelegate.swift 文件加载该 Controller 。

//SceneDelegate.swift

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    guard let windowScene = (scene as? UIWindowScene) else { return }

    window = UIWindow(frame: windowScene.coordinateSpace.bounds)
    window?.windowScene = windowScene

    self.loadBaseController()
}


func loadBaseController() {
   let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
   guard let window = self.window else { return }
   window.makeKeyAndVisible()
   if UserDefaults.standard.bool(forKey: "isLoggedIn") == false {
       let loginVC: ViewController = storyboard.instantiateViewController(withIdentifier: "login") as! ViewController
       self.window?.rootViewController = loginVC
   } else {
       let homeVC: HomeViewController = storyboard.instantiateViewController(withIdentifier: "showData") as! HomeViewController
       let navigationHomeVC = UINavigationController(rootViewController: homeVC)
       self.window?.rootViewController = navigationHomeVC
   }
    self.window?.makeKeyAndVisible()
}

关于ios - 如何使用 UserDefaults 快速实现登录/注销导航?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58444248/

相关文章:

swift - 如何将两个长度不同的数组的值相加?

ios - 如何删除指向 main.storyboard 的 IBAction 链接

ios - 导航栏问题, swift

ios - 有什么方法可以使用全局静态字典来访问 objective-c ios 中的所有 View Controller 吗?

ios - Swift:复制文件会出现 Cocoa 错误 262

swift - 在 Swift 的另一个 UIView 中使用一个 UIView 作为掩码

swift - 导入如何快速工作?

ios - 如何杀死多次点击的 Sprite ?

直播视频时 iOS MediaPlayer Framework 崩溃

android - 显示 ios 或 android 的特定内容?