带有七个选项卡的选项卡栏控制器,五个选项卡通向拆分视图控制器

时间:2015-11-23 13:04:12

标签: ios objective-c uiviewcontroller uitabbarcontroller uisplitviewcontroller

我已经做了很多研究并阅读了很多关于使用带有拆分视图控制器的Tab Bar控制器的信息,但似乎无法找到任何解决我的问题的提示......

以下文章"Place SplitViewController inside TabBarController"标题下的Cocoa Touch Apple开发者论坛中的帖子给了我最大的领先优势。

  

从iOS 8开始,在选项卡栏控制器中嵌入分割视图控制器   (或您自己的容器视图控制器)受支持和期望   '只是工作'。将拆分视图控制器推送到导航堆栈   仍然不受支持。

这似乎违反了Apple文档,包括2014年11月发布的标题为"Combined View Controller Interfaces"的文章。

  

您可以使用UIKit框架提供的视图控制器   自己或与其他视图控制器一起创建   更复杂的界面。组合视图控制器时   但是,遏制的顺序很重要;只是肯定的   安排有效。遏制的顺序,从孩子到   父母,如下:

     
      
  • 内容视图控制器和具有的容器视图控制器   灵活的边界(例如页面视图控制器)
  •   
  • 导航视图控制器
  •   
  • 标签栏控制器
  •   
  • 拆分视图控制器
  •   

我有一个UITabBarController,有七个标签。其中,五个标签位于UISplitViewController个,两个标签位于UINavigationController s。

这是一些故事板的屏幕截图,显示标签栏控制器导致五个分割视图控制器中的三个... Screenshot of <code>UIStoryboard</code>

当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassRegular运行目标时没问题 - 其中设备屏幕的水平(宽度)尺寸是常规(非紧凑) - &gt;在iPad上运行。所有七个选项卡都显示在底部选项卡栏中,所有视图控制器(包括拆分视图控制器)都可以正常工作

我的问题?

当我使用self.traitCollection.horizontalSizeClass = UIUserInterfaceSizeClassCompact运行目标时,Xcode会发出错误并冻结应用操作 - 其中设备屏幕的水平(宽度)尺寸为紧凑 - &gt;在iPhone或iPhone Plus上运行。正如预期的那样,对于IB和iOS设备都有相同的结果。

错误消息: Split View Controllers cannot be pushed to a Navigation Controller <UIMoreNavigationController: 0x7ffda38b0200>

我知道为什么我收到错误。在水平尺寸等级为“紧凑”的情况下,屏幕上的七个选项卡下降到五个,包括一个(由iOS特别准备)“更多”选项卡。其余三个选项卡将降级为“更多”选项卡,该选项卡是其自己的导航控制器和表视图控制器。我的故事板试图将拆分视图控制器推送到此导航堆栈。

对合法解决方案的任何想法?

1 个答案:

答案 0 :(得分:0)

我建议使用带有&#34;更多&#34;的自定义标签栏控制器。不将视图控制器推入导航控制器的部分。最好是一个UITabBarController的子类,因此您可以将它与Interface Builder一起使用。

我的方法是更换当前的&#34;更多&#34;表视图控制器,带有您自己的视图控制器,显示溢出选项卡列表,但在显示时不会将相应的视图控制器推入导航栏。

一种可能的策略是成为UITabBarController的更多导航控制器的代理(可在标签栏控制器的moreNavigationController属性中找到)。然后使用委托方法,例如navigationController:willShowViewController:animated :,来替换导航控制器的viewControllers数组的内容,如果要显示的视图控制器不是你的自定义&#34;更多&#34;查看控制器。

我还没试过这个,但它似乎是一个很好的起点,并且不需要太多关于tabview控制器内部的知识。