重要:这只是开发中API或技术的一个初步文档。苹果提供这些信息来帮助你在苹果产品上采用这些技术和编程界面。这些信息可能发生变化,根据这个文档实现的软件必须在最终的操作系统软件和最终的文档上测试。本文档的新版本可能用来作为未来API或技术的beta版。
UISplitViewController类是一个容器视图控制器,展示一种主从结构的界面。在这种主从结构界面中,主要视图中的变更会驱动第二个视图的变更。可以排列这两个视图控制器,这样就可以并排显示,一次显示一个视图,或者显示一个隐藏另一个。在iOS 8之后,你可以在所有iOS设备上使用UISplitViewController类,在iOS早期版本,该类只能在iPad上使用。
当构建应用的用户界面时,分屏视图控制器通常是应用窗口的根视图控制器。分屏视图控制器没有自己的外观。它的外观大部分都是由子视图控制器来定义的。你可以使用界面构建器或编程方式指定该视图控制器的viewControllers属性来配置子视图控制器。子视图控制器可以为自定义视图控制器或者其他容器视图控制器,例如导航控制器。
分屏视图控制器基于可用空间决定子视图控制器的排列。在横屏中,分屏视图控制器尽可能并排的展示视图控制器。在竖屏时,分屏视图控制器更像导航控制器,显示最初的主要视图控制器,然后推出或弹出第二个视图控制器。你也可以访问分屏视图控制器设置preferredDisplayMode属性的值完成具体的排列。
当在屏幕上显示时,分屏视图控制器使用delegate对象来管理其子视图控制器的显示。该代理是一个采用UISplitViewControllerDelegate协议的对象。使用该协议的方法来定制分屏视图控制器发生变化时的行为。更多的信息参见UISplitViewControllerDelegate协议参考(UISplitViewControllerDelegate Protocol Reference)
配置分屏视图界面外观
分屏视图控制器的可视化配置是由当前显示模式控制。你不用直接设置显示模式,相反,你使用preferredDisplayMode属性间接设置。分屏视图控制器力求遵循你指定的显示模式,但可能由于空间限制无法适应显示模式。例如,分屏视图不能在竖屏时并排显示它的子视图。
列表1列出可用的显示模式并描述了视图控制器是如何排列在屏幕上。该列表也列出常用的显示模式常量。
设置优先显示模式后,分屏视图控制器更新并根据displayMode属性展示显示模式。你可以在任何时候更改优先显示模式,这样分屏视图控制器相应的调整自己。分屏视图控制器也安装了一个内置的手势识别器,让用户使用划动动作更改显示模式。你可以通过设置presentsWithGesture属性为NO来禁用这个手势识别器。
displayModeButtonItem方法返回一个特定的工具栏按钮来更改显示模式,你可以结合到你的应用的用户界面。分屏视图控制器管理行为和外观。所有你要做的就是将它添加到界面中适当的导航栏或工具栏。当点击时,该按钮发送一个动作到分屏视图控制器,告诉它更改当前显示模式为分屏视图控制器代理的targetDisplayModeForActionInSplitViewController:方法制定的值。指定自动显示模式(或不实现代理方法)使分屏视图控制器实现的行为符合当前的size类。例如,iPad竖屏时,分屏视图控制器可以在隐藏和覆盖模式之间切换。基于手势的动作也使用委托方法来决定使用哪种显示模式。
在分屏视图界面改变子视图控制器
在设计分屏视图界面,最好不更改主要视图控制器和第二视图控制器。常见的技术是在两个位置都设置导航视图,在需要时推出和弹出新内容。这些锚视图控制器让你更专注于你的内容,而分屏视图控制器在整个界面执行其默认行为。
在这种情况下,你需要改变主要视图或第二视图控制器,建议你使用showViewController:sender:和showDetailViewController:sender:方法。使用这些方法(而不是直接修改viewControllers属性),让分屏视图控制器以最适合当前环境显示模式和大小展示指定视图控制器。分屏视图控制器知道如何以更直观的方式调整界面。它甚至可以与其他视图控制器(如导航控制器)展示视图控制器。例如,在竖屏环境中,主要视图控制器是一个导航控制器,调用showDetailViewController:sender:方法不会更换第二个视图控制器。相反,主要视图控制器将视图控制器从导航堆栈上推出。
折叠和扩大分屏视图界面
当分屏视图控制器的size类在横竖屏切换时,它执行折叠和扩大转换。在这个转换期间,分屏视图控制器变化显示子视图控制器。当从横屏切换到竖屏时,分屏视图控制器折叠其中一个视图到另一个视图上。当从竖屏切换到横屏时,它扩大视图根据当前显示模式显示一个或两个子视图控制器。
当过渡到折叠界面时,分屏视图控制器使用代理管理过渡。在折叠过渡结束时,分屏视图控制器通常只显示主要视图控制器的内容。你可以在分屏视图控制器代理中实现primaryViewControllerForCollapsingSplitViewController:方法,来更改这一行为。你可以使用该方法来指定第二个视图或完全不同的视图控制器,也许该视图在竖屏环境中更加适合展示。
通过调用代理来指定哪个视图成为主要视图控制器,并让代理来执行扩大到折叠的转换。如果你实现折叠分屏视图界面的代理方法,你必须实现primaryViewControllerForExpandingSplitViewController:和splitViewController:separateSecondaryViewControllerFromPrimaryViewController:方法来扩大视图。如果你不实现任何方法,分屏视图控制器提供默认的行为来处理扩大和折叠的转换。
更多关于管理折叠和扩大过渡的方法的信息,参见UISplitViewControllerDelegate协议参考(UISplitViewControllerDelegate Protocol Reference)。
将消息转发到其子视图控制器
分屏视图控制器负责协调应用窗口和其子视图控制器。因此,所有发送到子视图控制器的消息必须经过分屏视图控制器。这通常与你预期的一样,消息应该相对直观的流动。例如,只有当相应的子视图控制器出现在屏幕上,才会发送视图出现和消失的消息。
状态保护
在iOS6之后,如果你给分屏视图控制器的restorationIdentifier属性赋值,它保护任何有自己标示符的子视图控制器。在下一个启动周期,分屏视图控制器恢复保护的视图到以前的状态。分屏视图控制器的子视图控制器也许使用相同的标示符。分屏视图控制器会自动存储额外信息确保每个子视图的恢复路径是独一无二的。
更多关于保护和恢复工作状态的信息,参见iOS应用编程指南(iOS App Programming Guide)。
管理子视图控制器
·viewControllersProperty
·presentsWithGestureProperty
管理显示模式
·preferredDisplayModeProperty
·displayModeProperty
·- displayModeButtonItem
获取分屏视图配置
·collapsedProperty
·preferredPrimaryColumnWidthFractionProperty
·primaryColumnWidthProperty
·minimumPrimaryColumnWidthProperty
·maximumPrimaryColumnWidthProperty
访问代理对象
·delegateProperty
显示视图控制器的方法
·- showDetailViewController:sender:
·- showViewController:sender:
常量
·UISplitViewControllerDisplayMode
·Split View Controller Dimensions
官方原文地址:
https://developer.apple.com/library/prerelease/tvos/documentation/UIKit/Reference/UISplitViewController_class/#//apple_ref/doc/uid/TP40009277-CH1-DontLinkElementID_2