在其contentViewController中closures一个UIPopoverController?

如果你想closures一个popup窗口 – 例如,从popup窗口的contentViewController中的一个button,你必须 –

  1. 创build一个引用到由创build它的视图控制器持有的popup窗口
  2. 从contentViewController创build一个通知让拥有的视图控制器知道它应该被解散,或者为了同样的目的交替地创build一个委托
  3. 当popover准备好被解散时,发送通知或委托消息
  4. 调用dismissPopover:animated在通知或委托方法被调用时dismissPopover:animated

同时,从一个UIViewController你可以访问模态视图控制器,父视图控制器,导航控制器,分离视图控制器,标签栏控制器,search显示控制器,子视图控制器,呈现视图控制器和呈现视图控制器。

有没有更好的方法从popover的contentViewController做到这一点?

不幸的是,您必须创build一个对所述UIPopoverController的弱属性引用,因为无法从内容视图控制器中访问它。

我很惊讶UIViewControllers如何访问模式视图控制器,父视图控制器,导航控制器,分割视图控制器,标签栏控制器,search显示控制器,从iOS 5,子视图控制器,以及呈现并提供控制器…但不popup控制器(授予的popup不是UIViewController的,但仍然)。

从技术上讲,有一个私人的,未公开的方法来检索UIViewController在… popoverController …我不知道为什么他们从来没有公开,因为它应该是完全一样的任何上述控制器。

尽pipe在私人的,没有logging的世界里,也没有等同于dismissModalViewcontrollerAnimated: 你仍然必须得到这个参考,然后解雇它。

解决这个问题的另一种方法是创build一个抽象的视图控制器(用于所有的视图控制器),添加一个NSNotification观察者,如-(void)closePopoverIfNecessary:(NSNotification*)notification并有子类可选地实现方法来closures他们的popover(s)如果打开。 然后从popup窗口的控制器中启动通知closures它。 如果需要,您也可以通过通知(userInfo)传递其他信息。

这样就不需要父引用。