包含UISplitView不发送委托方法

时间:2011-06-08 23:56:10

标签: ios ipad uisplitviewcontroller

UISplitView具有以下委托方法,有助于在轮换期间修改布局:

- (void)splitViewController:(UISplitViewController *)svc 
     willHideViewController:(UIViewController *)aViewController 
          withBarButtonItem:(UIBarButtonItem *)barButtonItem 
       forPopoverController: (UIPopoverController *)pc;

- (void)splitViewController:(UISplitViewController *)svc 
     willShowViewController:(UIViewController *)aViewController 
  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem;

这些方法分别由UISplitView专用的方法调用,名为_viewControllerHiding:_updateMasterViewControllerFrame。这两个都是直接从事件循环的顶部调用的,显然是通过延迟调用。

但是,如果我将自己的视图控制器作为窗口的根目录(您不能将拆分视图控制器放置在导航控制器中),并将拆分视图从属于它,则不会正确发送委托方法。 (实际上,一个是viewDidLoad发送的,但没有一个是轮换的。)主视图的隐藏仍然存在,但没有代表喜欢帮助布局(管理popover / bar项目)。

我尝试将以下视图控制器方法转发到包含的拆分视图,但它们没有触发它。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation;
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
                                duration:(NSTimeInterval)duration;
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
                                         duration:(NSTimeInterval)duration;

任何人都有任何关于如何获取这些UISplitView委托方法的见解?最好不要私有API。

1 个答案:

答案 0 :(得分:0)

看看Combined View Controller Interfaces,你会发现拆分视图控制器不应该包含在任何其他类型的视图控制器中。你通过在自己的视图控制器中放置一个规则来打破这个规则,所以它不能很好地运行就不足为奇了。