如果你想解雇一个弹出窗口 - 例如,从popover的contentViewController中的一个按钮你必须 -
dismissPopover:animated
同时,从UIViewController
您可以访问模态视图控制器,父视图控制器,导航控制器,拆分视图控制器,标签栏控制器,搜索显示控制器,子视图控制器,呈现视图控制器和呈现的视图控制器。
有没有更好的方法从popover的contentViewController执行此操作?
答案 0 :(得分:29)
不幸的是,您必须创建一个对UIPopoverController
的弱属性引用,因为无法从内容视图控制器中访问它。
我很惊讶UIViewControllers如何访问模态视图控制器,父视图控制器,导航控制器,拆分视图控制器,标签栏控制器,搜索显示控制器以及iOS 5中的子视图控制器以及呈现和呈现控制器...但不是弹出控制器(授予的弹出窗口不是UIViewController
但仍然是。)
从技术上讲,有一个私有的,未记录的方法来检索UIViewController所在的popoverController ......我不知道为什么它们从未公开,因为它应该与上述任何控制器完全相同。
虽然即使在私人的,未记录的世界中,也没有相当于dismissModalViewcontrollerAnimated:
的东西。你仍然必须得到那个引用然后以这种方式解雇它。
答案 1 :(得分:1)
解决此问题的另一种方法是创建一个抽象视图控制器(适用于所有视图控制器),将NSNotification
观察者添加到-(void)closePopoverIfNecessary:(NSNotification*)notification
等方法,并让子类可选地实现方法如果打开,关闭他们的弹出窗口。然后从弹出框的控制器中激活通知以关闭它。如果需要,您还可以通过通知(userInfo)传递其他信息。
这样就不需要父引用了。