Как я могу исправить эту проблему с пропуском viewcontroller при входе в систему? - PullRequest
0 голосов
/ 24 октября 2019

Я работаю над процессом входа в приложение. В первом 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)

   }
}
...