当模态视图控制器被解除时如何调用函数
Posted
技术标签:
【中文标题】当模态视图控制器被解除时如何调用函数【英文标题】: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)
【问题讨论】:
【参考方案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?
以上是关于当模态视图控制器被解除时如何调用函数的主要内容,如果未能解决你的问题,请参考以下文章