在其contentViewController中closures一个UIPopoverController?
如果你想closures一个popup窗口 – 例如,从popup窗口的contentViewController中的一个button,你必须 –
- 创build一个引用到由创build它的视图控制器持有的popup窗口
- 从contentViewController创build一个通知让拥有的视图控制器知道它应该被解散,或者为了同样的目的交替地创build一个委托
- 当popover准备好被解散时,发送通知或委托消息
- 调用
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)传递其他信息。
这样就不需要父引用。