Как вызвать функцию, когда модальный контроллер вида был закрыт - PullRequest
0 голосов
/ 30 ноября 2018

В настоящее время у меня есть контроллер модального вида, который я использую для входа. Как только вход завершен, модальный режим закрывается.У меня возникают проблемы с запуском функции на исходном контроллере вида после того, как модал отклонен.

Я вызываю модал через segue, который подключен к кнопке на контроллере основного вида.Функция, которую я хочу запустить, уже находится в viewDidLoad и viewWillAppear, где она работает, когда контроллер представления первоначально загружен и появляется.

Я пытаюсь выяснить, как заставить его снова запускать функцию, как только она вернется к датеру представления, модал отклонен.

Контроллер исходного представления:

class SignInView: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.hidesBackButton = true

}

override func viewWillAppear(_ animated: Bool) {

    checkUser()

}

Контроллер модального вида:

@IBAction func submitBtn(_ sender: Any) {

    if username.text == "" && password.text == "" {
        displayAlert("Error", message: "Please Enter an Username and Password")
    }

    if username.text == "" {
        displayAlert("Error", message: "Please Enter an Username")
    }

    if password.text == "" {
        displayAlert("Error", message: "Please Enter a Password")
    }

    self.emailLogin()

}

func emailLogin() {

    guard let username = username.text, let password = password.text else {
        return
    }

    Auth.auth().signIn(withEmail: username, password: password) { (user, error) in

        if error != nil {
            print("Login Error")
            self.displayAlert("Failed to Login", message: "Username or Password is Inccrrect")
            return
        } else {

        print("Successfully Signed In")

        self.dismiss(animated: true, completion: nil)

        }

    }

}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

viewDidLoad вызывается один раз, когда vc запускается впервые, viewWillappear,viewDidAppear вызывается, когда вы отклоняете модель, скажем, с помощью overCurrentContext / pop от navigationController

Если вышеприведенное не относится к вашим случаям, тогдавам нужен делегат внутри prepareForSegue

let des = segue.destination as! ModalVC
des.delegate = self

class ModelVC://
  weak var delegate:MainVC?
}

Затем перед увольнением используйте

delegate?.checkUser()
self.dismiss(animated: true, completion: nil)

Также при использовании viewWillAppear не забудьте super.viewWillAppear(animated)

override func viewWillAppear(_ animated: Bool) {
   super.viewWillAppear(animated)
   checkUser() 
}
0 голосов
/ 30 ноября 2018

Одна возможность: изменить

self.dismiss(animated: true, completion: nil)

на

self.dismiss(animated: true) {
    theSignInView.callTheMethod()
}

Шаблон протокола / делегата часто используется для упрощения этого подхода.

...