Swift 取消模式视图后,如何重新加载tableView?

Swift 取消模式视图后,如何重新加载tableView?,swift,tableview,modalviewcontroller,dismiss,Swift,Tableview,Modalviewcontroller,Dismiss,在StoreViewController中,单击按钮时,将打开名为AddStoreVC的ModalViewController 然后在AddStoreVC,当我按下Save时,我想关闭它自己(我可以),当StoreViewController加载时,tableView将被刷新 VIEWWILLEASEN、VIEWDIDSEASEN或之前线程上的任何替代方案都不适用 非常感谢您的支持。您可以使用关闭、委托或通知(甚至KVO也是一种解决方案)。既然你有一对一的关系,我会选择闭包或模式 关闭: 添加将

在StoreViewController中,单击按钮时,将打开名为AddStoreVC的ModalViewController

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

VIEWWILLEASEN、VIEWDIDSEASEN或之前线程上的任何替代方案都不适用


非常感谢您的支持。

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

关闭: 添加将以模式显示的ViewController(AddStoreVC)

当您在其上调用
disease(动画:完成:)
时,请调用
onwilldisease?()

在演示视图控制器中,获取模式控制器上的参考,然后执行以下操作:

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)
}
weak var customDelegate: AddStoreVCCustomProtocol?
使演示文稿与之兼容:

extension StoreViewController: AddStoreVCCustomProtocol {
    func modalVCWillDismiss(_ modalVC: AddStoreVC) {
        myTableView.reloadData()
    }
    func modalVC(_ modalVC, willDimissWithParam param: Int) {
        print("theIntPassed with delegate: \(param)")
        myTableView.reloadData()
    }
}
将属性添加到模式以具有委托:

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

然后在
disease(动画:completion:)
customDelegate?.modalvcwilldisease(self)
或`customDelegate?.modalVC(self,willDimissWithParam:theIntIWantToPass)

使用
通知观察者
customDelegate
。实际上,在modally-presented控制器中,您不需要关闭或委托。这是有道理的
(将ViewController呈现为?StoreViewController)。myTableView.reloadData()
可能确实可以做到这一点。只是重载方法或var不应该在其他实例中可见。因此,保持协议仍然是一件好事,可以做
(将ViewController呈现为?ReloadableProtocol).reload()
。在闭包的情况下,我应该在哪里添加
modalVC.onwilldisease={[weak self]In self?.myTableView.reloadData()}
部分?因为willbeep不起作用。您如何以模态方式呈现
AddStoreVC
?从情节提要开始?密码?这就是当您通过代码或重写prepareForSegue创建它时,@Baseduo…当我按Save时,您会得到的
modalVC
var。在那里,在行动中。或者采用
UIAdaptivePresentationControllerDelegate
并实现
presentationControllerDidAttemptToDismiss
。当你向下滑动时,它被调用。