【问题标题】:How can I reload the tableView after dismissal of modal view? [duplicate]关闭模式视图后如何重新加载 tableView? [复制]
【发布时间】:2021-07-29 17:37:41
【问题描述】:

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

然后在 AddStoreVC,当我按下 Save 时,我想关闭自己(我可以),当 StoreViewController 加载时,tableView 被刷新。

viewWillAppear、viewDidAppear 或之前线程上的任何替代方案均不适用。

感谢您的支持。

【问题讨论】:

  • 使用NotificationObserverCustomDelegate

标签: swift tableview modalviewcontroller dismiss


【解决方案1】:

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

关闭:

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

var onWillDismiss: (() -> Void)?

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

在呈现的 ViewController 中,获取对 modal 的引用,然后执行:

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) 上调用它

【讨论】:

  • 实际上在模态呈现的控制器中,您不需要关闭也不需要委托。有presentingViewController
  • 好点。 (presentingViewController as? StoreViewController).myTableView.reloadData() 确实可以做到这一点。只是重新加载方法或 var 不应该在其他实例中可见。所以保持协议仍然是一件好事,要做(presentingViewController as? ReloadableProtocol).reload()
  • 在闭包的情况下,我应该在哪里添加modalVC.onWillDismiss = { [weak self] in self?.myTableView.reloadData() } 部分?因为 willWillAppear 不起作用。
  • 您如何以模态方式呈现AddStoreVC?从情节提要中转场?代码?这就是你得到modalVC var 的地方。当您通过代码创建它时,或者通过覆盖prepareForSegue。
  • @Baseduo ....当我按下保存时。在那里,在行动中。或者采用UIAdaptivePresentationControllerDelegate并实现presentationControllerDidAttemptToDismiss。向下滑动时调用它。
猜你喜欢
  • 2014-08-24
  • 2020-09-28
  • 2020-11-22
  • 1970-01-01
  • 2020-03-25
  • 2017-11-14
  • 1970-01-01
  • 2021-10-23
  • 2012-04-30
相关资源
最近更新 更多