解散Popover后更新第一个视图

我从第一个视图控制器(tableview)inheritance到第二个视图控制器,这是一个tableview。 我没有第二个视图后,我需要重新加载第一个控制器中的表视图。 popoverPresentationControllerDidDismissPopover被调用,如果我点击popup窗口外,但如果在第二个tableview中有另一个button,然后回到第一个? 通常我需要用户点击添加button才能从桌面视图中出来,而不是在popup窗口之外轻敲。 我保留外面的轻拍作为取消行动。

谢谢 在桌面上的Poppver

代码方法popoverPresentationControllerDidDismissPopover不会以编程方式closures。

解决的办法是当你通过调用dismiss(animated:completion:)来解除popover时,你必须调用table view来重载数据。

所以基本上你调用两次tableView.reloadData() 。 一个在popoverPresentationControllerDidDismissPopover ,一个是在你的添加button点击方法之后dismiss(animated:completion:)

更新

从你的截图中,我假设你的第一个视图控制器(VC1)是背景的一个,第二个视图控制器(VC2)是popup的。

如果是这样,你有两个select:

  1. 在VC2上,声明自定义协议,通知VC1重新加载表视图数据,只要选中一行,并将VC1中的委托设置为VC2。
  2. 而不是使用一个协议,你可以简单地在VC2中声明一个块属性。 例如:

    @property (copy, nonatomic) void (^itemSelectedHandler)() ;

当一个项目被选中时,调用这个(仍然在VC2中):

 self.itemSelectedHandler(); 

然后在VC1中,初始化VC2,这是popover,处理块。 例如:

 vc2.itemSelectedHandler = ^{ [vc1.tableView reloadData]; } 

不幸的是,我没有经历过快速编程,所以我不得不使用客观的C代码作为例子。

Swift 3.0版本:

Popover VC:

定义一个属性:

 var dismissHandler: (() -> Void)! 

当popover正在被解雇时调用这个处理程序:

 self.dismissHandler() 

父VC:

在Segue的准备方法中传递处理程序

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { ... destinationVC.dismissHandler = { self.tableView.reloadData() } ... }