Я работаю над процессом входа в приложение. В первом viewcontroller пользователь должен согласиться с условиями использования. Затем они отправляются на экран, где они должны ввести номер счета. Как только они это сделают, они отправляются на другой экран, где они вводят имя пользователя и пароль. Отсюда они достигают главного экрана приложения. У меня есть настройка приложения, так что, как только пользователь проходит этот процесс входа в систему, в следующий раз, когда он открывает приложение, загружается домашний экран, и ему не нужно повторять этот процесс снова. Если пользователь действительно хочет выйти из системы, он может сделать это с домашнего экрана, и он возвращает его к экрану соглашения, чтобы начать сначала. Проблема в том, что когда они нажимают «согласиться» после этого, приложение пропускает экран «учетной записи» и переходит прямо к экрану имени пользователя и пароля. Я думаю, что проблема заключается в том, что мне нужно также стирать информацию о пользовательской ошибке, когда пользователь выходит из системы, чтобы приложение не «запомнило», чтобы перенести их на будущие экраны. У кого-нибудь есть советы? Вот код для этих четырех контроллеров представления в следующем порядке:
class AgreementViewController: UIViewController {
@IBOutlet weak var agreeTapped: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
if UserDefaults.standard.bool(forKey: "ISUSERLOGGEDIN") == true {
//user is already logged just navigate home screen
let accountVC =
self.storyboard?.instantiateViewController(identifier: "AccountViewController") as! AccountViewController
self.navigationController?.pushViewController(accountVC, animated: false)
}
}
}
class AccountViewController: UIViewController {
@IBOutlet weak var txtAccount: UITextField!
@IBOutlet weak var submitTapped: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
if UserDefaults.standard.bool(forKey: "ISUSERACCOUNTIN") == true {
//user is already logged just navigate home screen
let usernameVC =
self.storyboard?.instantiateViewController(identifier: "UsernameViewController") as! UsernameViewController
self.navigationController?.pushViewController(usernameVC, animated: false)
}
}
@IBAction func submitTapped(_ sender: Any) {
UserDefaults.standard.set(true, forKey: "ISUSERACCOUNTIN")
if txtAccount.text == "test" {
//navigate to login screen
let usernameVC =
self.storyboard?.instantiateViewController(identifier: "UsernameViewController")
as! UsernameViewController
self.navigationController?.pushViewController(usernameVC, animated: true)
}
}
}
class UsernameViewController: UIViewController {
@IBOutlet weak var txtUsername: UITextField!
@IBOutlet weak var txtPassword: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
if UserDefaults.standard.bool(forKey: "ISUSERLOGGEDIN") == true {
//user is already logged just navigate home screen
let homeVC =
self.storyboard?.instantiateViewController(identifier: "MainMenuViewController") as! MainMenuViewController
self.navigationController?.pushViewController(homeVC, animated: false)
}
}
@IBAction func authenticateUser(_ sender: Any) {
UserDefaults.standard.set(true, forKey: "ISUSERLOGGEDIN")
if txtUsername.text == "test" && txtPassword.text == "test"{
//navigate to home screen
let homeVC =
self.storyboard?.instantiateViewController(identifier: "MainMenuViewController")
as! MainMenuViewController
self.navigationController?.pushViewController(homeVC, animated: true)
}
}
}
class MainMenuViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: false)
}
@IBAction func logoutUser(_ sender: Any) {
UserDefaults.standard.set(false, forKey: "USERISLOGGEDIN")
self.navigationController?.popToRootViewController(animated: true)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: true)
}
}