相关资料
马上着手开发 iOS 应用程序 (Start Developing iOS Apps Today)
苹果开发中文站 cocoachina
The Swift Programming Language中文完整版
检查器面板
视图控制器
构建了基本的视图层次后,下一步就需要控制可视元素并响应用户输入。在 iOS 应用程序中,您可以使用视图控制器 (UIViewController
)
来管理内容视图及其分视图层次。
视图控制器并不是视图层次的一部分,也不是界面中的元素。相反,它管理着层次中的视图对象,并为它们提供行为。在串联图中构建的每个内容视图层次,都需要一个对应的视图控制器来管理界面元素,并执行任务来响应用户的交互操作。通常,这意味着您需要为每个内容视图层次编写一个自定 UIViewController
子类。如果应用程序有多个内容视图,那么就需要为每个内容视图使用不同的自定视图控制器类。
视图控制器扮演着多种角色。它们负责协调应用程序的数据模型与显示该数据的视图之间的信息传输,管理应用程序的内容视图的生命周期,并处理设备旋转时方向的更改。但其最主要的作用可能是响应用户输入。
您还可以使用视图控制器来转换各种类型的内容。由于 iOS 应用程序显示内容的空间很有限,因此视图控制器提供了所需要的基础结构,可让您移除一个视图控制器的视图,替换为另一个视图控制器中的视图。
通过让视图控制器文件与串联图中的视图进行通信,可以定义应用程序中的交互方式。方法是通过 Action 与 Outlet 来定义串联图与源代码文件之间的连接
操作 (Action)
操作 是一段代码,它与应用程序中可能会发生的某类事件相链接。该事件发生后,代码就会执行。您可以定义操作来完成任何事情:从操控数据到更新用户界面。操作可驱动应用程序的流程来响应用户事件或者系统事件。
可采用如下方法来定义:使用 IBAction
返回类型和 sender
参数来创建并实现方法。
-
(IBAction)restoreDefaults:(id)sender;
sender
参数指向负责触发操作的对象。IBAction
返回类型是个特殊的关键词。它与 void
关键词类似,但它表示该方法是一种操作,您可以在 Interface
Builder 的串联图中连接到这种操作(这就是这个关键词有 IB
前缀的原因)。在“教程:串联图”中,您会了解如何将 IBAction
操作链接到串联图中元素的更多知识。
Outlet
Outlet 可让您从源代码文件引用界面中的对象(添加到串联图的对象)。您可以按住 Control 键,并将串联图中的特定对象拖移至视图控制器文件来创建 Outlet。这就为视图控制器文件中的对象创建了属性,通过该属性,您可以在运行时通过代码来访问并操控该对象。例如,在第二个教程中,您将为
ToDoList 应用程序中的文本栏创建 Outlet,这样就可以用代码的形式访问文本栏的内容。
Outlet 被定义为 IBOutlet
属性。
@property
(weak,
nonatomic)
IBOutlet
UITextField
*textField;
IBOutlet
关键词告诉 Xcode,您可以从 Interface Builder 连接到该属性。在“教程:串联图”中,您会了解有关如何从串联图将
Outlet 连接到源代码的更多知识。
控制 (Control)
控制是用户界面对象(例如按钮、滑块或者开关),用户可以操控它们来与内容进行交互、提供输入、在应用程序内导航,以及执行所定义的其他操作。代码可通过控制来接收用户界面的消息。
用户与控制进行交互,会创建控制事件。控制事件表示用户可在控制上使用的各种手势,例如将手指抬离控制、手指拖移到控制上,以及在文本栏中按下。
常见的事件类型有三种:
- 触碰和拖移事件。用户通过触碰或者拖移与控制交互时,发生的就是触碰和拖移事件。触碰事件分几个阶段。例如,当用户初次用手指触碰按钮,就会触发 Touch Down Inside 事件;如果用户手指拖离按钮,则会触发相应的拖移事件。当用户的手指抬离按钮但仍停留按钮边缘的范围内,就会发送
Touch Up Inside。如果用户在抬起手指前,手指已经拖离了按钮(实际上是取消了触碰),就会触发 Touch Up Outside 事件。 - 编辑事件。用户编辑文本栏,发生的是编辑事件。
- 值更改事件。用户对控制进行操控,从而导致控制产生一系列不同的值,发生的是值更改事件。
定义交互时,您应该了解与应用程序中每个控制相关联的操作,然后明确地向用户展示应用程序中控制的作用。
导航控制器
如果应用程序有多个内容视图层次,就需要能够在它们之间进行切换。为此,可以使用专门的视图控制器:导航控制器 (UINavigationController
)。导航控制器管理在一系列视图控制器中向后和向前切换的操作,例如用户在
iOS 版“邮件”应用程序的电子邮件帐户、收件箱邮件和单封电子邮件之间导航。
我们将由特定导航控制器所管理的一组视图控制器称为其导航栈。导航栈是一组后进先出的自定视图控制器对象。添加到堆栈的第一个项目将变成根视图控制器,永不会从堆栈中弹出。而其他视图控制器可被压入或弹出导航栈。
虽然导航控制器的最主要作用是管理内容视图控制器的显示方式,但它还负责显示自己的自定视图。具体来说,它会显示导航栏(位于屏幕顶部的视图,提供有关用户在导航层次中位置的上下文)。导航栏包含一个返回按钮和其他可以自定的按钮。添加到导航栈的每个视图控制器都会显示这个导航栏。您需要配置导航栏。
一般而言,您不必执行任何操作来将视图控制器弹出导航栈;导航控制器提供的返回按钮会实现该操作。但您需要手动将视图控制器压入堆栈中。可使用串联图来操作。
Debug