【问题标题】:willHideViewController called despite the app is in landscape mode尽管应用程序处于横向模式,但仍会调用 willHideViewController
【发布时间】:2011-04-27 10:10:30
【问题描述】:

我正在开发一个以横向模式启动的 iPad 应用。

第一个屏幕显示 UISplitViewController,我的问题是,尽管应用程序处于横向模式,但代理仍会在 splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 上收到通知,尽管文档指出:

当拆分视图控制器旋转时 从风景到肖像 方向,它通常隐藏其中之一 它的视图控制器。当那个 发生时,它调用此方法 协调添加一个按钮到 的工具栏(或导航栏) 剩余的自定义视图控制器。如果 你想要即将隐藏的视图 控制器显示在 popover,你必须实现这个 方法并使用它来添加指定的 按钮到您的界面。

由于应用程序处于横向模式并且未转换为纵向模式,我不明白为什么通知我的代表。为什么会这样?

【问题讨论】:

    标签: ios ipad


    【解决方案1】:

    valentin,直接回答“为什么会这样?”,我认为答案很简单,这是他们的 API 实现中的一个错误。

    您似乎已经发现,当处于横向时,它会在看起来不应该调用上述内容时调用,然后调用 splitViewController:willShowViewController:invalidatingBarButtonItem: 。

    另外,我发现在纵向时,它会向splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 发送一条非常早的消息(即在调整 view.frame 之前)。

    我看到最让我烦恼的一件事是,使用他们创建模板时提供的代码,按钮栏会在启动时出现然后消失。

    我的解决方案是实施一种变通方法,我已在 git@github.com:johnkdoe/freeforall.git 的 KludgeWorkaroundForBuggySplitViewDelegateStartup 类中发布。

    使它成为您当前详细视图控制器类的超类,如

    //@interface MyViewController : UIViewController<UISplitViewControllerDelegate>
    @interface MyViewController : KludgeWorkaroundForBuggySplitViewDelegateStartup
    

    如果您没有喜欢的东西,这会将初始按钮栏标题设置为 Master。您可以通过覆盖子类实现中的 @property getter 来覆盖它。如果您想做的不仅仅是这个 kludgeWorkaround 类中的内容,您可以自己覆盖这些内容并(复制和粘贴或)在自己工作之前对它们调用 [super ...]。

    我不能说这解决了在我看来是一个实现错误的问题,但解决方法消除了在横向模式下启动拆分视图控制器应用程序时按钮栏的短暂外观。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多