模态关闭后重新加载主视图

时间:2020-06-09 09:12:28

标签: swift xcode uiviewcontroller modalviewcontroller

在我的Xcode-App中,可以从每个视图打开一个模式。每个'base'视图都有不同的用途,有的显示表格,有的没有。每当模态消失时,如何实现重新加载'base'视图?

由于视图具有如此不同的结构和目的,这似乎特别棘手。我尝试了viewWillAppearviewDidAppearviewDidLoad,但似乎没有一个能解决问题。

1 个答案:

答案 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
    }
}