UISplitViewController和复杂的视图层次结构

M. *_*yan 9 iphone uikit ipad uisplitviewcontroller

我正在做一个iPad技术演示,我遇到了一个严重的技术问题.

我有一个利用UISplitViewController的应用程序概念,但不是整个应用程序的主要控制器.

应用程序流程大致可以这样描述:

主屏幕(UIViewController)列表 - >详细信息"目录"(UISplitViewController)超级细节屏幕(UIViewController但可以想象也可以是SplitView的孩子).

问题出在Home和Catalog之间.一旦将UISplitViewController视图添加到UIWindow,它就会开始出现混乱.

问题可归纳为:

当UISplitView生成弹出视图时,它似乎会被锁定到其父视图.从UIWindow子视图中删除UISplitView后,您将获得CoreGraphics异常,并且视图将无法删除.

当添加其他视图(可能在这种情况下,你要返回的主屏幕)时,它们不会自动旋转,而是由于CG异常而无法移除的UISplitView继续响应旋转,造成可怕的渲染错误,不能只是"处理".此时,添加任何视图,甚至重新添加SplitView,都会导致一连串的渲染错误.

然后我尝试简单地将SplitView作为"底部"视图保留,并保持在其顶部添加和删除主屏幕,但这失败,因为SplitView支配Orientation更改调用,并且主屏幕不会旋转,甚至如果你打电话给[homeScreen becomeFirstResponder]

您不能将SplitView放入像UINavigationController这样的层次结构中,您将获得彻底的运行时错误,因此该选项不在表中.模态看起来很糟糕,无论如何都是劝阻.

我现在的假设是处理这个问题的唯一正确方法是以某种方式"解除"UISplitViewController,以便它可以从其父视图中删除而不抛出未处理的异常,但我不知道如何.

如果您想查看完全符合我需要的应用,请查看iPad应用商店中的GILT Groupe.他们将其关闭,但他们似乎编写了一个完整的自定义视图转换集.

非常感谢帮助.

Jan*_*ann 8

Apple 声明:

应始终将拆分视图控制器的视图安装为应用程序窗口的根视图.您永远不应在导航或标签栏界面内显示拆分视图.

并不意味着它应该是根视图,而不是另一种观点的子视图.即使他们补充说:

您永远不应在导航或标签栏界面内显示拆分视图

这并不意味着您可以将其添加为任何其他控制器的子视图.(抱歉)

我有一种感觉,你所经历的是试图这样做的副产品.我真的很惊讶GILT Groupe的应用程序没有被拒绝.Apple最近倾向于严格执行这些HIG指南.当您尝试将它们添加到NavigationController时,它们(正如您已经发现的那样)会导致相当讨厌的运行时错误.


M. *_*yan 4

我已经为自己解决了这个问题...实际上已经解决了...通过将所有其他可能的全屏视图呈现为 SplitView 的模式...

在我的书中,这是一种令人讨厌的做事方式,但如果您只想“有时”在应用程序中利用 SplitView,Apple 给您别无选择。