模态关闭后重新加载主视图
Reload main view after modal dismiss
在我的 Xcode-App 中,可以从每个视图打开一个模式。每个 'base' 视图都有不同的目的,有些显示 table,有些则没有。每当模式被关闭时,我如何才能重新加载 'base' 视图?
这似乎特别棘手,因为视图具有如此不同的结构和目的。我尝试了 viewWillAppear
、viewDidAppear
和 viewDidLoad
,但其中 none 似乎可以解决问题。
您可以设置委托模式,以便您的模态视图可以通知它何时消失或消失。
首先您需要为您的委托创建一个协议:
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
}
}
在我的 Xcode-App 中,可以从每个视图打开一个模式。每个 'base' 视图都有不同的目的,有些显示 table,有些则没有。每当模式被关闭时,我如何才能重新加载 'base' 视图?
这似乎特别棘手,因为视图具有如此不同的结构和目的。我尝试了 viewWillAppear
、viewDidAppear
和 viewDidLoad
,但其中 none 似乎可以解决问题。
您可以设置委托模式,以便您的模态视图可以通知它何时消失或消失。
首先您需要为您的委托创建一个协议:
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
}
}