【问题标题】:How do I use popover segues with a universal storyboard on iOS 7?如何在 iOS 7 上使用带有通用情节提要的 popover segues?
【发布时间】:2014-12-01 01:07:12
【问题描述】:

我正在从硬编码布局转移到 Xcode 6 中可用的新通用故事板系统。能够创建一个故事板,通过自动布局的魔力,这两者都适用,这真是太好了iPhone 和 iPad。我的理解是通用故事板向后兼容 iOS 7。

但是,我在使用 popover segues 时遇到了问题。在 iOS 8 上,新的“Present as Popover”segue 将在 iPad 界面上显示为弹出框,在 iPhone 界面上显示为模态视图控制器。这正是我想要的行为,但是当我在 iOS 7 上运行我的通用情节提要时,每当我尝试 popover segue 时,应用程序就会崩溃。这是我收到的错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'-[UIPopoverController initWithContentViewController:] called when not 
running under UIUserInterfaceIdiomPad.'

这有点烦人,因为我不想为每个 UI 习惯使用单独的故事板。

看起来这些是我的选择:

  • 创建UIStoryboardSegue 的子类,它将在 iPad 上显示弹出框,在 iPhone 上显示模式视图。这需要在我的应用中手动更改所有 popover segues 的类。
  • 从每个条形按钮项、表格单元格等中创建两个转场 - 一个是纯“Popover”转场,一个是纯“模态”转场。在这种情况下,我将无法仅控制拖动到下一个屏幕,并且必须创建自定义操作方法,这些方法将根据当前 UI 习惯调用正确的 segue。
    • 放弃通用故事板并创建特定于设备的故事板,直到我可以要求我的用户使用 iOS 8。

这些都不是很好的选择,所以我想知道:我还有其他选择吗?我提出的解决方案是否遗漏了任何问题?

【问题讨论】:

  • 我遇到了完全相同的问题。目前我正在采用自定义 segue 路线,因为我觉得它最不烦人,但我对此并不满意。

标签: ios ipad storyboard ios-universal-app


【解决方案1】:

Xcode 6 支持统一的故事板。故事板可以根据显示视图控制器的尺寸类添加或删除视图和布局约束。您可以为多个尺寸类制作单个故事板,而不是维护两个单独(但相似)的故事板。

但 Size 类基于 iOS8 支持的 UITraitCollection。这就是它在 iOS7 上崩溃的原因。

【讨论】:

  • 这应该在评论中,因为您没有回答问题,
【解决方案2】:

我最终制作了一个模态转场并检查代码以查看它是否在装有 iOS 7 的 iPhone 上。然后我使用performWithSegue 来选择应该采用哪个转场。 iOS 8 可以处理弹出框代码,但 iOS 7 存在问题。

【讨论】:

    【解决方案3】:

    如果设备是 iPhone,您似乎正在尝试以模态方式展示您的视图,如果设备是 iPad,您正在尝试以 Popover 方式展示您的视图。 要产生这种情况,最简单的方法是在事件发生时检查 InterfaceIdiom(如按钮单击)并有条件地使用适当的方法。

    -(IBAction)btnClicked:(id)sender{
        if([[UIDevice currentDevice] userInterfaceIdiom]==UIUserInterfaceIdiomPad){
            //your popover code..
        }else{
            //your present modaly code...
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 2011-12-26
      • 1970-01-01
      相关资源
      最近更新 更多