《Swift iOS应用开发实战》——3.4了解视图控制器

3.4了解视图控制器

通过Calculator项目我们可以体会到,每个视图控制器都会负责管理iOS应用程序中的一个独立视图,响应用户在该视图中的操作。但是不仅如此,在需要的时候,它还要负责与其他视图控制器的切换以及在控制器间的数据传递。比如iOS中的通讯录程序,当用户点击某个联系人(单元格)的时候,当前控制器A要负责切换到另外一个控制器B(负责显示联系人详细信息的视图控制器)。
3.4.1视图控制器简介
到目前为止,你应该明白视图控制器的作用了。简单来说,它就像是iOS应用程序中所实现的每个功能的核心组件,将视图和数据模型紧密连接在一起,用Model所提供的数据“装填”视图。
在Calculator项目的ViewController类中,我们可以看到viewDidLoad和didReceive-MemoryWarning方法。其中第一个方法会在载入视图后执行,而第二个方法则会在收到内存警告的情况下执行。通过重写这些方法,可以帮助我们更好地管理控制器。
上面提到的两个方法在控制器的生存期(注意,不是生理期)内有效,理解控制器的生存期可以帮助我们正确管理其所包含的数据模型和视图。如果你对生存期有足够的了解,就可以让控制器在载入视图时做些事情,或者是在移除视图时完成一些任务。正确理解生存期将是成为一名优秀iOS程序员的基础,因为控制器是解决一切问题的核心。
当应用程序运行到某个指定的视图控制器以后,控制器就要将其自己的视图对象显示在屏幕上,这会引发一系列的事件。如果该视图控制器的视图属性还没有被入内存中,控制器将调用loadView方法。当载入视图完成,就会调用viewDidLoad方法,在这个方法里面我们可以对需要显示的数据进行初始化,如图3-6所示。
如果你愿意,完全可以在控制器中重写loadView方法,通过编写代码的方式创建控制器的视图,这种方式与我们在Calculator中通过故事板的方式正好相反。

表3-1列出了一些方法,这些方法在整个视图控制器生存期中是由不同的视图事件所触发的,它可以让你更精确地控制视图控制器在不同状态时需要完成的事情。

为了验证控制器生存期中的方法,我们在ViewController类中重写两个方法。
步骤1在项目导航中选择ViewController.swift,在-viewDidLaod方法的最后添加下面一行代码:

println("viewDidLoad 被调用")
步骤2在-viewDidLaod方法下面添加如下两个方法:
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    println("viewWillAppear 被调用")
}

override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    println("viewDidAppear 被调用")
}

构建并运行应用程序,在控制台中我们会看到如下输入信息:

viewDidLoad 被调用
viewWillAppear 被调用
viewDidAppear 被调用

从输出结果我们可以发现,-viewDidLaod是第一个被调用的方法,第二个是-viewWill-Appear,第三个则是-viewDidAppear。在调用-viewDidLaod方法之前,视图控制器还会检测是否有-loadView方法被重写,Calculator项目并没有重写-loadView方法,完全是通过故事板载入的控制器视图。这里我们不再去重写-viewWillDisappear和-viewDidDisappear方法,因为只有载入另一个控制器的时候,当前控制器的这两个方法才会被调用。
虽然在Calculator中我们只使用了一个视图控制器,但是苹果还为我们提供了很多不同类型的控制器,方便我们开发应用程序。
3.4.2不同类型的视图控制器
苹果提供了多种不同类型的视图控制器来实现应用程序的一些常用功能,比如帮助我们将数据布局到表格视图或者网格中。另外,这些控制器也能够管理其他的视图控制器,从而让用户以标签栏或先后结构层次的形式有序地呈现控制器。表3-2列出了这些控制器。

其实,在上面表格中所列出的视图控制器我们都不会陌生,因为iOS中的原生应用全部用到了它们,接下来我们就逐一开始介绍。

  1. 导航控制器
    导航控制器(navigation controller)是以层级结构的形式来管理其堆栈中的多个视图控制器。在导航控制器中,我们把其中的第一个视图控制器叫做根视图控制器(root view controller)。当导航控制器显示视图时,我们可以将另外一个视图推送进栈。导航控制器允许我们一级级地退出当前视图控制器,直至退回到根视图控制器。图3-7显示了“设置”应用程序中的导航控制器。

iOS的“设置”应用程序使用了导航控制器,当我们点击“通用”以后,一个新的视图会被推送到navigation controller的堆栈中并显示在屏幕上面。在屏幕的左上方还有一个返回按钮,可以让我们直接返回到之前的视图,或者点击其他控件进入更深层次的视图。

  1. 标签栏控制器
    标签栏视图控制器(tab bar view controller)提供分割不同的视图控制器的一种简单方式。标签栏是该控制器的标志元素,苹果的“电话”应用程序就使用了标签栏控制器,如图3-8所示。

标签栏中可以包含若干个标签条目(tab bar item),每个标签条目则包含一个图标和一个标题,用于构建标签条目的外观。每个标签包含一个独立的视图控制器,比如可以在标签中包含一个导航控制器,就像“电话”中的“通讯录”。

  1. 表格视图控制器
    表格视图控制器(table view controller)包含了一个单独的表格视图。表格视图允许我们以单元格的形式一行行地显示数据信息,并且还可以对数据行进行分组。

图3-9显示了一个表格视图控制器的样子,如果需要,我们还可以将其分组为多个部分。

时间: 2024-11-13 06:31:36

《Swift iOS应用开发实战》——3.4了解视图控制器的相关文章

《Swift iOS应用开发实战》——1.3 了解Xcode

1.3 了解Xcode 作为一名开发者,不管在什么平台上进行开发,总需要一大堆的软件支持,才能将自己的想法变成可以让成千上万人受益的应用程序.苹果不希望这样,它为开发者提供了一个优雅的.功能强大的.光鲜亮丽的开发工具包,这个包就叫做Xcode.通过Xcode,我们可以创建.测试.部署和发布iOS或OS X应用程序.在2014年6月,苹果发布了iOS 8和Xcode 6的beta版本,在使用的过程中笔者能够感受到苹果力求让开发工具无比简单.实用.通过其强大的功能和全新技术,帮助开发者在创建应用程序

《Swift iOS应用开发实战》——导读

前言 苹果公司在2014年6月的WWDC(Worldwide Developers Conference,苹果全球开发者大会)上向公众展现了全新的iOS 8移动操作系统和Yosemite桌面操作系统.作为开发者,大会开幕之前的任何爆料,我都是不会错过的.在大会开幕的前一天,我得知本届大会的宣传标语为:编写代码改变世界(Write the Code. Change the World).历届WWDC的宣传标语都是以全新.卓越.领先.创新.引领等作为关键词,而这次却使用了非常接地气的"编写代码&qu

《Swift iOS应用开发实战》——3.1MVC设计模式简介

3.1MVC设计模式简介 要想成为一名优秀的iOS程序开发人员,至少要具备一种面向对象程序设计语言的开发经验,比如Java.C++或C#,并且C语言也是我们必须熟练掌握的,在此基础上学习Swift语言就会游刃有余.除此以外,我们还要对设计模式有一定的了解.在iOS中最重要的,也是使用最多的一种设计模式就是:模型-视图-控制器(Model-View-Controller,MVC)设计模式. 在开发面向对象应用程序之前(甚至是面向对象程序开发成为主流后的一段时间),程序员们在编写程序代码时还总是愿意

《Swift iOS应用开发实战》——2.5与代码进行关联

2.5与代码进行关联 通过前面的学习,我们已经知道如何在故事板中创建用户界面,但在搭建好用户界面以后又要做什么呢?接下来就需要将控件对象和程序代码关联起来.我们在创建Calculator项目的时候使用了默认的Single View Controller模板,该模板关联了故事板中的View Controller场景和ViewController.swift文件中的ViewController类.现在我们在故事板中查验一下.在故事板中选中View Controller场景,使用Command+Opt

《Swift iOS应用开发实战》——2.3 创建用户界面

2.3 创建用户界面 此前我们在图2-3和图2-5中分别看到了一个空白视图和一个含有多个界面元素的视图.下面我们就通过动手实践来完成用户界面的搭建. 打开Calculator项目中的Main.storyboard文件,确保文档大纲可见,此时IB编辑器中只呈现一个View Controller视图控制器的View. 从Xcode 4.5开始,IB针对用户界面的布局加入了自动布局(Auto Layout)特性,并且该特性在Xcode 5中得到了很大的改进.如果说在Xcode 5中使用自动布局特性还是

《Swift iOS应用开发实战》——3.3关于Application Delegate

3.3关于Application Delegate 到目前为止,我们终于编写了一个像点儿模样(至少可以完成某种简单功能)的App.它看起来是不是很酷呢?请不要激动,在保持充分淡定的同时,让我们花费一点时间来了解下源代码中的一个文件-AppDelegate.swift,这个文件实现了"应用程序委托".在Cocoa Touch中,使用委托(Delegate)的频率往往大于我们每天上厕所的频率(除了闹肚子的时候).简单来说,它就是在对象中,让另外一个对象负责完成某件任务,并且将完成的状态和需

《Swift iOS应用开发实战》——第2章 搭建计算器的界面

第2章 搭建计算器的界面 作为一名开发者,有的时候你可能会听到身边的人在指着手机不停抱怨:"如果有这样一款应用该多好--"是呀,当一个不经意的想法被你变成现实的时候,你所得到的不仅仅是经济方面的利益,更多的是那种经历,那种从无到有,从幼稚到成熟的过程,而经历和过程无比珍贵.通过本书的学习,你将学会如何创建基于iOS平台的应用程序,并且通过对程序的改进,你完全有可能开发出一款在App Store上有百万用户下载的应用,但"千里之行始于足下",让我们一起先从本书的第一个

《Swift iOS应用开发实战》——3.2Calculator项目中的控制器

3.2Calculator项目中的控制器 在Calculator项目中,ViewController.swift文件中所定义的ViewController类就是一个视图控制器,与它关联的视图就是Main.storyboard文件中ViewController场景里面的View,如图3-2所示.如果我们选择故事板中ViewController场景中的控制器,然后按Command+Option+3快捷键切换到标识检视窗,就会看到Custom Class部分的Class被设置为ViewControll

《Swift iOS应用开发实战》——第1章 Swift简介

第1章 Swift简介 北京时间2014年6月3日凌晨1点,苹果公司(以下简称苹果)在美国旧金山Moscone中心举行了WWDC开发者大会开幕式,会上正式发布了iOS 8移动操作系统以及OS X Yosemite桌面操作系统.抛开Yosemite不谈,苹果在iOS 8中更新了很多内容,其中包括: 锁屏状态下直接快速删除通知. 支持发送语音信息. 输入法支持预判联想功能. 新增Healthkit健康应用. Siri支持流媒体识别,可以直接通过它购买音乐. 自带相册集成更强大的图片处理软件. 大幅改