在我的Xcode-App中,可以从每个视图打开一个模式。每个'base'视图都有不同的用途,有的显示表格,有的没有。每当模态消失时,如何实现重新加载'base'视图?
由于视图具有如此不同的结构和目的,这似乎特别棘手。我尝试了viewWillAppear
,viewDidAppear
和viewDidLoad
,但似乎没有一个能解决问题。
答案 0 :(得分:2)
您可以设置委托模式,以便您的模式视图可以通知何时消失或消失。
首先,您需要为您的代表创建一个协议:
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
}
}