Swift - нажатие ViewController не работает после повторного представления ViewController - PullRequest
0 голосов
/ 25 января 2020

Вопрос звучит немного запутанно, но я не знаю, как его лучше описать. Позвольте мне объяснить:

Первый ViewController, который будет представлен, - FirstLaunchVC, где он вводит пользователя его электронная почта, и если он зарегистрирован, он получает LoginVC и оттуда получает MainVC. Все работает нормально.

В MainVC пользователь может выйти и вернуться к FirstLaunchVC. Однако после выполнения weiterButton, который должен привести пользователя к LoginVC, ничего не происходит.

FirstLaunchV C:

@objc func weiterButtonTapped() {

    email = emailTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)

    //prüfen, ob Email schon registriert ist
    Auth.auth().fetchSignInMethods(forEmail: email) { (methods, error) in

        //Email ist noch nicht registriert -> sign up
        if methods == nil {

            let SignUpView = self.storyboard?.instantiateViewController(withIdentifier: "SignUpVC") as! SignUpViewController

            SignUpView.email = self.email

            self.navigationController?.pushViewController(SignUpView, animated: false)

        }
        //Email ist registriert -> login
        else {
            print("hi")

            self.view.endEditing(true)

            let LoginView = self.storyboard?.instantiateViewController(withIdentifier: "LoginVC") as! LoginViewController

            LoginView.email = self.email

            self.navigationController?.pushViewController(LoginView, animated: true)
        }
    } 
}

Основная проблема:

print(hi) печатает, но pushViewController не работает после выхода из системы.

LoginV C:

func transitionToHome () {

    let homeVC =
    storyboard?.instantiateViewController(withIdentifier: Constants.Storyboard.homeViewController) as? MainViewController
    let navigationController = UINavigationController(rootViewController: homeVC!)

    view.window?.rootViewController = navigationController
    view.window?.makeKeyAndVisible()
}

MainV C:

Здесь пользователь может выйти.

@objc func signoutButtonTapped() {
    UserDefaults.standard.setIsLoggedIn(value: false)
    UserDefaults.standard.synchronize()

    let firstLaunchVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "FirstLaunchVC")

    self.navigationController?.present(firstLaunchVC, animated: true)
}

Я пытался объяснить проблему как можно лучше. Если что-то все еще неясно, просто дайте мне знать. Я рад за любую помощь:)

1 Ответ

0 голосов
/ 25 января 2020

если после выхода из системы вызывается weiterButtonTapped (),

, вы должны поместить строку pushController в диспетчеризацию, потому что контроллер полностью освобожден:

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
        self.navigationController?.pushViewController(LoginView, animated: true)
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...