你怎样才能重新加载视图控制器在Swift中解除模态表示的视图控制器?

我有第一个tableViewController打开了第二个tableViewcontroller点击一个单元格。 第二个视图控制器以模态方式呈现(Show Detail segue),并被解除:

self.dismissViewControllerAnimated(true, completion: {}) 

此时,第二个视图控制器滑开并显示其下的第一个视图控制器。 在这一点上,我想重新加载第一个视图控制器。 我明白,这可能需要使用委托function,但不知道如何进行。 在此先感谢您的帮助!

我解决了这个问题,因为我不想要这个依赖。

而这种方法是当你以模态方式呈现一个控制器的时候,因为呈现控制器不会在你放弃提交时重新加载。

反正解决scheme!

相反,你做一个单身(调解人)

 protocol ModalTransitionListener { func popoverDismissed() } class ModalTransitionMediator { /* Singleton */ class var instance: ModalTransitionMediator { struct Static { static let instance: ModalTransitionMediator = ModalTransitionMediator() } return Static.instance } private var listener: ModalTransitionListener? private init() { } func setListener(listener: ModalTransitionListener) { self.listener = listener } func sendPopoverDismissed(modelChanged: Bool) { listener?.popoverDismissed() } } 

你有没有介绍控制器执行这样的协议:

 class PresentingController: ModalTransitionListener { //other code func viewDidLoad() { ModalTransitionMediator.instance.setListener(self) } //required delegate func func popoverDismissed() { self.navigationController?.dismissViewControllerAnimated(true, completion: nil) yourTableViev.reloadData() (if you use tableview) } } 

最后在您的ViewDid / WillDisappear函数或自定义函数的PresentsViewController中添加:

 ModalTransitionMediator.instance.sendPopoverDismissed(true) 

你可以简单地将你的数据在viewDidAppear: ,但是这可能会导致在某些情况下不必要地刷新表。

一个更灵活的解决scheme是使用正确的猜测协议。

假设你的第一个tableViewController的类名是Table1VC ,第二个是Table2VC 。 您应该定义一个名为Table2Delegate的协议,该协议将包含一个方法,如table2WillDismissed

 protocol Table2Delegate { func table2WillDismissed() } 

然后你应该让你的Table1VC实例符合这个协议,并且在你实现委托方法的时候重新载入你的表。

当然为了这个工作,你应该添加一个属性到Table2VC ,它将保存委托:

 weak var del: Table2Delegate? 

并将其值设置为您的Table1VC实例。

设置委托之后,只需在调用Table2VC实例中的Table2VC之前将委托方法调用Table2VC

 del?.table2WillDismissed() self.dismissViewControllerAnimated(true, completion: {}) 

这将使您精确控制何时重新加载表。