来自:http://www.cocoachina.com/newbie/basic/2014/0327/8058.html
在布局界面后,你需要让用户与之进行交互。这就要用到控制器了。控制器通过响应用户的操作和用内容填充视图来支持视图。控制器对象是一个通道,视图通过它知道数据模型中的变化。反过来说,视图通过应用程序的控制器了解模型数据中的变化,并把用户发起的变化(比如在文本框输入文本)传达到model
objects。不管它们是响应用户的操作还是定义导航,控制器都执行了应用程序的行为。
View Controllers
在创建了基本的视图层次后,下一步是管理视觉元素和响应用户输入。在iOS app中,你使用视图控制器(UIViewController)
来管理内容视图以及其子视图层次。
视图控制器并不是视图层次的一部分,也不是界面上的元素。相反,它管理层次中的视图对象,并为它们提供行为。你在storyboard中创建的每个内容视图层次都需要一个相应的视图控制器,用以来管理界面元素和执行用户响应用户交互。这通常意味着为每个内容视图层次编写一个自定义UIViewController子类。如果你的应用程序有多个内容视图,你可以为每个内容视图使用一个不同的自定义视图控制器。
视图控制器扮演着多个角色。它们协调应用程序数据模型和视图(用以展示数据)间的信息流动,管理内容视图的生命周期,并处理设备旋转时发生的方向改变。但是它们最主要的角色可能是响应用户的输入。你也可以使用视图控制器来实现不同类型内容之间的过渡。由于iOS
app用于展示内容的空间有限,所以视图控制器提供的基础结构需要移除一个视图控制器的视图,并用另外一个的视图替代。
为了定义应用程序的交互,要让视图控制器文件和storyboard中的view通信。你可以利用actions和outlets定义storyboard和源代码文件之间的连接来做到这一点。
Actions
Actions是连接至发生在应用中的某种类型事件的一段代码。当事件发生时,代码就会被执行。你可以定义一个action来完成任何事情,从操作代码片段到更新用户界面。你可以使用action来驱动app工作流,以响应用户或者系统事件。
通过用IBAction返回类型和sender参数创建和执行一个方法来定义一个action。
- - (IBAction)restoreDefaults:(id)sender;
sender参数指向负责触发action的对象。IBAction返回类型是一个特殊的关键字,就像void关键字。你将会在
Tutorial: Storyboards中学会更多关于如何把IBAction
action连接至storyboard中元素上的知识。
Outlets
Outlets提供了一个从界面引用对象的方法--从源代码文件添加到storyboard的对象。你通过在storyboard中Control-dragging一个特定对象到一个视图控制器文件来创建outlet。这为视图控制器文件中的对象创建一个属性,允许你在运行时从代码中访问和操作对象。比如,在第二个教程中,你将在ToDoList
app中为文本框创建一个outlet,能够在代码中访问文本框的内容。
Outlets被定义为IBOutlet属性。
- @property (weak, nonatomic) IBOutlet UITextField *textField;
IBOutlet关键字告知Xcode你可以从Interface Builder连接至这个属性。你将会在
Tutorial:
Storyboards中学习更多关于如何从storyboard连接outlet至源代码。
控件
控件是用户界面上的对象,比如按钮,滑块儿,或者开关等此类用户可以与内容进行交互、提供输入、在app中导航,以及执行其他你定义的操作。控件为代码提供了一种从用户界面接受消息的方式。
当用户界面上有了控件后,你就创建了一个控制事件。控制事件代表用户在控件上所做的各种各样的物理手势,比如从控件上抬起手指,在控件上拖动手指,以及在文本框内点击。
以下是三种常见的事件类型:
触摸拖动事件。当用户通过触摸和拖放与控件进行交互时发生该事件。这里有几个可用的触摸事件阶段。比如当用户开始把手指放在按钮上,就触发Touch Down
Inside事件;如果用户在按钮上拖动,就会触发拖动事件。Touch Up
Inside发生在用户抬起手指但是依然在按钮边缘范围内。如果在手势离开按钮之前,用户在按钮范围之外拖动手指,那就有效地取消了触摸,触发了Touch Up
Outside事件。
编辑事件:当用户编辑文本时发生编辑事件。
值变更事件:用户操作控件引起其发出一系列不同的值。
当你定义交互时,要知道app中每个控件相应的操作,然后在界面上让控件的目的显而易见。
导航控件
如果你的应用程序不止有一个视图层次,那你需要在它们之间实现过渡。这一点,你将会用到一个特殊类型的视图控制器--导航控制器 (UINavigationController)。导航控制器通过一系列的视图控制器管理视图的前后过渡,比如用户在iOS
Mail app的email账户、收件箱、单个email之间进行导航。
一套的视图控制器由一个名为navigation stack的特别控制器管理。navigation
stack是一个后进先出的自定义视图控制器对象集合。添加至栈的第一个视图控制器被称为根视图控制器(root view
controller),它永远不会被推出栈,其他视图控制器可以被推入或者推出navigation stack。
虽然导航控制器的首要工作是管理content view
controller的展示,但它也负责展示其自定义视图。具体一点是它展示导航栏--该视图在屏幕顶端展示用户在导航层级中位置,它包含一个返回按钮和其他自定义按钮。每个被添加至navigation
stack的视图控制器展示该导航栏。你负责配置导航栏。
通常你不需要做任何工作把视图控制器推出navigation
stack;视图控制器提供的返回按钮可以为你处理这些。但你需要手动把视图控制器推至栈。你可以使用storyboards做到这一点。
使用Storyboards定义交互
至此,你已经学习了使用storyboards创建单个内容屏幕。现在你将学习在应用中定义多个场景间的转换。在第一个教程中,你使用了有一个场景的storyboard。对于大多数应用来说,storyboard由一系列的场景组成,每个场景都展示着视图控制器及其视图层次。场景通过segues连接,它代表两个视图控制器之间的过渡:来源和目标。
以下是你可以创建的segues:
Push:Push segues把目标视图控制器添加至navigation stack,它只能在源视图控制器被连接至导航控制器的时候使用。
Modal:Modal
segue仅仅是一个模态展示其他控制器的视图控制器,在返回app主流程之前,要求用户在当前展示的控制器上执行某些操作。Modal视图控制器并没有被添加到navigation
stack上,相反它通常被认为是展示视图控制器的子视图控制器。当前呈现的视图控制器负责解除它创建和展示的modal视图控制器。
Custom:你可以通过子类化UIStoryboardSegue来定义自定义过渡。
Unwind:Unwind segues可以带领用户通过一个或者多个segues返回到视图控制器的现有实例。你可以使用unwind
segues实现反向导航。
场景也是通过关系连接。比如,导航控制器和它的根视图控制器之间存在一个关系。在这个情况下,关系表示导航控制器包含根视图控制器。当使用storyboard规划应用程序的用户界面时,要确保其中一个视图控制器是作为首个视图控制器。运行时,该视图控制器的内容视图将会是应用启动时首个展示的内容。根据需要你可以从一个视图控制器过渡至其他视图控制器的内容视图。
现在你已经学习了使用视图和视图控制器的基础知识,你将在下一个教程中把这些知识应用到ToDoList app中。
从今天开始学习iOS开发(iOS 7版)--构建一款App之定义交互---转载--3.27--,,5-wow.com