【问题标题】:How to call a function when a Modal View Controller has been dismissed当模态视图控制器被解除时如何调用函数
【发布时间】:2018-11-30 02:39:33
【问题描述】:

我目前有一个用于登录的模式视图控制器。登录完成后,模式将关闭。一旦模式被解除,我无法让函数在原始视图控制器上运行。

我通过连接到主视图控制器上的按钮的 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)

        }

    }

}

【问题讨论】:

    标签: ios swift function modalviewcontroller


    【解决方案1】:

    一种可能性:改变

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

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

    协议/委托模式通常用于促进这种方法。

    【讨论】:

    • 我得到错误'Instance member 'checkUser' cannot be used on type 'SignInView';您的意思是改用这种类型的值吗?
    【解决方案2】:

    viewDidLoad 在首次启动 vc 时调用一次,viewWillappear,viewDidAppear 在您关闭模型时调用,例如使用导航控制器中的overCurrentContext / pop

    如果上述情况不是您的情况,那么您需要在prepareForSegue 内有一个代表

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

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

    然后在dismiss之前使用

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

    另外,当您使用viewWillAppear 时,不要忘记super.viewWillAppear(animated)

    override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       checkUser() 
    }
    

    【讨论】:

    • 将此属性添加到它weak var delegate:MainVC?
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多