【问题标题】:Contained UISplitView not sending delegate methods包含的 UISplitView 不发送委托方法
【发布时间】:2011-06-09 08:05:01
【问题描述】:

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 上发送了一个,但在旋转时没有发送。)主视图的隐藏仍然存在,但没有代表喜欢帮助布局(管理弹出框/栏项目)。

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

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

任何人都知道如何让这些 UISplitView 委托方法触发?最好不要私有 API。

【问题讨论】:

    标签: ios ipad uisplitviewcontroller


    【解决方案1】:

    看看Combined View Controller Interfaces,你会发现拆分视图控制器不应该包含在任何其他类型的视图控制器中。你把一个放在你自己的视图控制器中就违反了这条规则,所以它不能很好地工作也就不足为奇了。

    【讨论】:

    • 是的,我稍微推动了设计规范,幸好他们正在为 5.0 抽象/形式化容器控制器
    • 我完全重新设计了代码,放置了一个“管理器”,负责更换窗口的根控制器(并在它们之间进行合理的转换)——管理器与视图/视图控制器没有任何关系层次结构,而不是操纵它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多