概述

这个类实现了一个专门针对UINavigationController视图控制器,管理导航层次的内容。这个类还不能用于子类化。相反,您使用实例的原样,在这种情况下,你想让你的应用程序的用户界面以反映你的内容层次结构。这个导航接口可以出示你的数据有效,也让用户更容易导航内容。

一个导航屏幕界面通常模仿的分级组织您的数据。在每一个层级的级别,您提供一个适当的屏幕(托管由自定义视图控制器)来显示内容在那个水平。图1显示了一个示例的导航接口提出的设置应用程序在iOS模拟器。第一个屏幕提供给用户的应用程序列表,包含的偏好。选择一个应用程序显示个人设置和组设置为该应用程序。选择一个集团收益更多设置等等。除了根看来,导航控制器提供了一个后退按钮,允许用户将备份的层次结构。

图1示例导航接口

 



一个导航控制器对象管理当前显示的屏幕使用导航堆栈。底部的堆栈是根视图控制器和在堆栈的顶部是目前显示视图控制器。你用你的导航的方法控制器对象来在运行时修改了堆栈。最常用的操作是推动新视图控制器放入堆栈中使用pushViewController:动画:方法。推动一个新的视图控制器对象放入堆栈中使视图的视图控制器显示和导航控件被更新来反映这一变化。你通常把视图控制器在响应用户选择一个项目,导致下一水平在你的信息的层次结构。

除了推到导航视图控制器堆栈,您还可以使用popViewControllerAnimated流行他们:方法。虽然您可以弹出视图控制器自己,导航控制器还提供了一个后退按钮(在适当的时候),顶弹出视图控制器在响应用户交互。

一个导航控制器对象通知其委托对象以应对变化的活动视图控制器。委托对象是一个自定义对象由你的应用程序符合UINavigationControllerDelegate协议。您可以使用该协议的方法来应对变化和执行额外的设置或清除任务。

Navigation Controller Views

因为UINavigationController类继承自UIViewController类、导航控制器有自己的观点,是通过视图属性。当部署一个导航接口,您必须安装这个视图作为根的无论你创建视图层次。例如,如果您正在部署导航接口本身,你会使这种观点主要的子视图的窗口。安装一个导航接口在一个标签栏接口,您将安装导航控制器的视图作为根视图适当的选项卡。

这个视图导航控制器只是一个集装箱几个其他视图,包括一个导航栏,一个可选的工具栏,和视图包含您的自定义内容。图2显示了如何组装这些观点提出总体导航接口。虽然内容的导航栏和工具栏的观点的变化,视图自身不。只有自定义内容视图更改以反映视图控制器,是在堆栈顶部的导航。

图2视图的导航控制器



注意:因为数量的可用空间的自定义视图可以改变(取决于大小的其他导航视图),您的自定义视图的autoresizingMask属性应该设置为有一个灵活的宽度和高度。在显示之前你的观点,导航控制器自动位置和尺寸符合可用的空间。

导航控制器负责管理配置和显示导航栏和导航工具栏。你必须从不修改这些视图直接。相反,你应该操纵它们通过方法和属性的类UINavigationController来。您可以隐藏和显示导航栏使用navigationBarHidden财产或setNavigationBarHidden:动画:方法。

有特定的方法来定制导航栏显示在导航接口。它是允许修改barStyle或半透明性质的导航栏,但你必须永远不会改变它的框架,界限),或直接的alpha值。您还可以指定一个自定义UINavigationBar子类使用initWithNavigationBarClass:toolbarClass:方法来初始化导航控制器。此外,导航控制器对象构建导航栏的内容动态使用导航项(UINavigationItem类的实例)相关的视图控制器在导航堆栈。改变导航栏的内容,您必须配置导航项目定制视图控制器。导航项目的更多信息,请参阅UINavigationItem类引用。

Updating the Navigation Bar

当用户更改顶层视图控制器,不管是通过推动或弹出视图控制器或更改内容的导航堆栈直接,导航控制器更新相应的导航栏。具体来说,导航控制器更新栏按钮项显示在导航栏中的三个职位:左、中、右。栏按钮项UIBarButtonItem类的实例。您可以创建自定义内容项与或创建标准系统项目根据您的需要。为更多的信息关于如何创建物品栏按钮,见UIBarButtonItem类引用。

bar按钮项左边的导航栏允许导航回到前面的视图控制器在导航堆栈。导航控制器更新的左侧导航栏如下:

如果新的顶层视图控制器有一个定制的左栏按钮项目,该项目是显示。指定一个自定义的左栏按钮项,设置leftBarButtonItem属性的视图控制器的导航项。
如果顶层视图控制器并没有一个定制的左栏按钮项,但导航项前面的视图控制器有一个有效的项目在其backBarButtonItem财产,导航栏显示该项目。
如果一个定制栏按钮项没有指定由这两个视图控制器,一个默认使用后退按钮和标题设置为标题属性的值前面的视图控制器,视图控制器是一位下降到栈上。(如果只有一个视图控制器在导航堆栈,没有后退按钮显示)。

导航控制器更新中间的导航栏如下:

如果新的顶层视图控制器有一个自定义标题看来,导航栏显示视图代替默认的标题视图。指定一个自定义标题视图,设置titleView属性的视图控制器的导航项。
如果没有自定义标题查看设置,导航栏显示一个标签包含视图控制器默认的标题。字符串对于这个标签通常是得到标题属性的视图控制器本身。如果你想要显示一个不同的标题比一个相关联的视图与控制器,设置title属性的视图控制器的导航项相反。

导航控制器更新右侧导航栏如下:

如果新的顶层视图控制器有一个自定义正确的栏按钮项目,该项目是显示。指定一个自定义正确的物品栏按钮,设置rightBarButtonItem属性的视图控制器的导航项。
如果没有定义正确的物品栏按钮指定,导航栏显示任何内容的右边栏。

导航控制器更新导航栏每次顶部视图控制器的变化。因此,这些改变发生的每一次一个视图控制器被推到堆栈或从它出现。当你激活一个推或弹出操作,导航控制器类似的变化改变在导航栏内容。

Displaying a Toolbar

在iOS 3.0和以后,导航控制器对象可以很容易实现一个自定义工具栏为每一个屏幕的一个导航接口。导航控制器对象现在管理着一个可选的工具栏在视图层次。在显示时,这个工具条获得其当前组条目从toolbarItems财产的活动视图控制器。当活动视图控制器变化,导航工具栏项控制器更新匹配新的视图控制器,带动了新物品的位置在适当的时候。

导航工具栏是隐藏在默认情况下,但你可以为你的导航界面显示它通过调用setToolbarHidden:动画:方法你的导航控制器对象。如果不是你所有的视图控制器支持工具栏项,你的委托对象可以调用这个方法来切换工具栏的可见性在随后的推动和流行操作。使用一个自定义UIToolbar子类,可以使用initWithNavigationBarClass:toolbarClass:方法来初始化导航控制器。

State Preservation

在iOS 6和之后,如果您分配一个值到这个视图控制器的restorationIdentifier属性,它试图保护孩子在其导航视图控制器堆栈。导航控制器底部开始堆栈和向上移动,编码每个视图控制器,也有一个有效的修复标识符字符串。在接下来的发布周期,导航控制器恢复保存视图控制器导航堆栈以相同的顺序,他们被保存下来。

这孩子视图控制器你推到导航堆栈可能使用相同的修复标识符。导航控制器自动存储额外的信息,以确保每个孩子的恢复路径是独一无二的。

posted on 2012-12-18 10:44  小苹果一枚  阅读(149)  评论(0)    收藏  举报