您可以设置一个委托模式,以便您的模态视图可以通知它何时会或确实会消失。
首先你需要为你的委托创建一个协议:
protocol ModalViewControllerDelegate: class {
func modalControllerWillDisapear(_ modal: ModalViewController)
}
那么你的模态应该有一个委托属性(最终将是呈现控制器)并在需要时触发modalControllerWillDisapear方法:
final class ModalViewController: UIViewController {
weak var delegate: ModalViewControllerDelegate?
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
delegate?.modalControllerWillDisapear(self)
}
}
所有将呈现模态控制器的视图控制器都必须符合该协议,并在呈现时将自己指定为模态的委托:
final class SomeViewController: UIViewController {
private func presentModalController() {
let modal = ModalViewController()
modal.delegate = self
self.present(modal, animated: true)
}
}
extension SomeViewController: ModalViewControllerDelegate {
func modalControllerWillDisapear(_ modal: ModalViewController) {
// This is called when your modal will disappear. You can reload your data.
print("reload")
}
}
注意:如果您使用 segues 来展示您的模态,您可以在 prepare(for:sender:) 方法中分配委托属性,而不是在自定义方法中。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
switch (segue.identifier, segue.destination) {
// Check that the segue identifer matches and destination controller is a ModalViewController
case ("showModalSegue", let destination as ModalViewController):
destination.delegate = self
case _:
break
}
}