你怎样才能重新加载视图控制器在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: {})
这将使您精确控制何时重新加载表。