关闭模态视图后如何重新加载 tableView?

How can I reload the tableView after dismissal of modal view?

在 StoreViewController 中,单击按钮时,会打开一个名为 AddStoreVC 的 ModalViewController。

然后在 AddStoreVC 中,当我按下“保存”时,我想自行关闭(我可以这样做),当加载 StoreViewController 时,要刷新 tableView。

viewWillAppear、viewDidAppear 或 none 先前线程中的备选方案适用。

感谢您的支持。

您可以使用闭包、委托或通知(甚至 KVO 也是一种解决方案)。既然你有一对一的关系,我会选择闭包或模式。

关闭:

添加将模态呈现的ViewController (AddStoreVC)

var onWillDismiss: (() -> Void)?

当你在上面调用 dismiss(animated:completion:) 时,调用 onWillDismiss?()

在演示 ViewController 中,获取模态参考,然后执行:

modalVC.onWillDismiss = { [weak self] in 
    self?.myTableView.reloadData()
}

我没有传递任何参数(()),但如果您还想检索一个参数,请添加它。假设您想要一个 Int:

var onWillDismiss: ((Int) -> Void)?
onWillDismiss?(theIntIWantToPass)
modalVC.onWillDismiss = { [weak self] theIntPassed in 
    print(theIntPassed)
    self?.myTableView.reloadData()
}

代表:

你也可以使用委托模式:

创建委托:

protocol AddStoreVCCustomProtocol {
    func modalVCWillDismiss(_ modalVC: AddStoreVC)
    func modalVC(_ modalVC, willDimissWithParam param: Int)
}

使演示者符合它:

extension StoreViewController: AddStoreVCCustomProtocol {
    func modalVCWillDismiss(_ modalVC: AddStoreVC) {
        myTableView.reloadData()
    }
    func modalVC(_ modalVC, willDimissWithParam param: Int) {
        print("theIntPassed with delegate: \(param)")
        myTableView.reloadData()
    }
}

在 Modal 中添加一个 属性 以获得委托:

weak var customDelegate: AddStoreVCCustomProtocol?

并在 dismiss(animated:completion:) 上调用它:customDelegate?.modalVCWillDismiss(self) 或 `customDelegate?.modalVC(self, willDimissWithParam: theIntIWantToPass)