2014-10-06 103 views
11

我正在从硬编码布局转换到Xcode 6中提供的新通用故事板系统。能够创建一个故事板,通过自动布局的魔力,可以同时处理iPhone和iPad。而我的理解是,通用故事板向后兼容iOS 7。如何在iOS 7上使用通用故事板的popover segues?

但是,我遇到了一个问题,使用popover segues。在iOS 8上,新的'呈现弹出式'segue将在iPad界面上显示为弹出窗口,并在iPhone界面上显示为模态视图控制器。这正是我想要的行为,但是当我在iOS 7上运行我的通用故事板时,每次尝试popover时都会崩溃。下面是错误消息我得到:

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。

这些都不是伟大的选择,所以我在想:我有任何其他选项?我是否错过了我提出的解决方案的任何问题?

+1

我有完全相同的问题。目前我正在采用自定义的赛格路线,因为我觉得这是最没有意义的,但我对此并不满意。 – 2014-11-10 18:16:33

回答

-1

好像你正试图以模态方式呈现你的视图,如果设备是iPhone和作为Popover,如果设备是iPad .. 为了产生最简单的方法是在事件发生时检查InterfaceIdiom(如按钮单击)并有条件地使用适当的方法。

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

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

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

+1

这应该在评论中,因为你没有回答问题, – 2016-08-29 10:29:18

0

我最终制作了一个模式代码,并检查代码以查看它是否在iOS 7的iPhone上。然后我使用performWithSegue来选择应采用哪种代码段。 iOS 8可以处理popover代码,但iOS 7有问题。