** **每次运行应用程序时,我都必须登录才能进入应用程序的主页。
当我点击登录按钮直到点击注销按钮时,如何存储 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/