模态视图控制器被关闭后如何调用函数

时间:2018-11-30 02:39:34

标签: ios swift function modalviewcontroller

我目前有一个用于登录的模态视图控制器。一旦登录完成,模态就会关闭。取消模式后,我无法让func在原始视图控制器上运行。

我通过连接到主视图控制器上按钮的segue调用模态。我要运行的功能已经在viewDidLoad和viewWillAppear中,当视图控制器最初加载并显示时它在哪里工作。

我正试图弄清楚如何使模态返回到视图日期后就再次运行func。

原始视图控制器:

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 :(得分:1)

一种可能性:改变

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

收件人

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

协议/代理模式通常用于简化此方法。

答案 1 :(得分:0)

viewDidLoad在首次启动vc时被调用一次,viewWillappear,viewDidAppear在您用overCurrentContext或从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() 
}