ios 视图控制器

视图控制器

    视图控制器就是iOS MVC设计模式中的Controller部分。每个视图控制器都管理着一套视图,这些视图组成了程序用户界面里的一个组件。视图控制器负责协调视图的加载以及视图的样貌,同时还会响应用户的操作。

    视图控制器也会与设备及底层操作系统相配合。比方说,用户旋转设备的时候,视图控制器会更新其中视图的布局。当操作系统的内存过低时,控制器也会对内存警告做出响应。

    简言之,视图控制器提供了集中管理机制。它会处理一系列各自独立的开发需求,这些需求可能是由视图、模型、iOS或者设备本身引发的。

    视图控制器也把与显示方式有关的隐喻集中起来。我们可以在容器里面分层添加视图控制器,以实现出非常优秀的自定义界面。系统提供了一些很常用的父视图/子视图型视图控制器,比方说,导航控制器使得用户可以从一个视图切换到另一个视图,页面视图控制器可以模仿出电子书的效果,标签栏控制器提供了推压按钮,使得用户可以在多个子控制器之间切换,而分栏视图控制器则可以把主要内容以列表形式显示在一边,同时把细节信息展示在另一边。

    视图控制器本身并不是视图,而是一种没有视觉样貌的类,它管理着视图。借助视图控制器,开发者能够把视图放在比较大一些的应用程序里面使用。

    iOS SDK提供了许多视图控制器类。有些比较通用,有些比较具体。

1、UIViewController类

    UIViewController是其他视图控制器类的父类,它用来管理主视图,视图控制器的很多工作都由这个类来完成,开发者需要花很大部分时间来定制这个类的子类。基本的UIViewController类能够管理主视图从启动到结束的整个生命期,并且会把此过程中某些必须响应的变化考虑进去。

    UIViewController实例负责配置视图的样貌以及它所要显示的子视图。一般来说,他要从XIB或故事板文件中加载这些信息。此外,他也提供了一些实例方法,使开发者可以用代码来手工创建视图布局,或在视图加载完毕之后添加行为。

    视图控制器还有一个职责,就是响应正在显示出来或正要隐藏起来的视图。对于大型应用程序中的视图来说,视图控制器确实要处理这些事。开发者可以在vieWillAppear:及viewWillDisappear:等方法中完成与视图管理有关的例行任务。

我们可以在视图显示之前预先加载数据,也可以在视图即将消失时清理资源。

    上面提到的每件任务都描述了视图与其外围应用程序之间的某种配合方式。UIViewController是用来协调视图和外部需求的,他会令视图自身发生变化,以满足那些需求。

2、导航控制器

    从名称可知,导航控制器是一种可以在树状视图层级之间上下游走的控制器,对于比较小的iOS设备来说,这是一种重要而常见的界面设计方式,而对于平板电脑来说,它也可以用作辅助的设计方案。导航控制器会在屏幕上方创建半透明的导航栏,很多iOS应用程序里都能看见这种效果。

    通过导航栏控制器,我们可以把新的视图叠放在已有的视图之上,此时会自动生成Back按钮,该按钮会显示出上一个视图控制器的标题。所有的导航控制器都是用根视图控制器来创立导航树,这个根控制器位于树状结构顶端,这样做使得用户可以通过Back按钮返回主视图。在平板电脑上,我们可以把基于导航控制器的界面与基于UIBarButtonItem的菜单项结合起来,以产生popover式的显示效果,也可以把它和UISplitViewController实例相集成,实现出主要内容与详细信息分栏展示的效果。

    把界面导航这一功能交给导航控制器之后,开发者就可以专心的设计用户界面,并为每个视图控制器创建相应的屏幕,我们不用担心具体的导航细节,只需告诉导航控制器接下来要切换到哪个视图就行。系统会自动把原来的视图叠放起来,并处理好导航按钮。

3、标签栏控制器

    通过UITabBarController类,我们可以在应用程序里控制许多平行的内容。这有点像收音机的选台机制,不需要有特定的导航体系,用户就可以通过标签栏来调到自己喜欢的视图控制器上面。这些平行的内容都是各自独立的,而且可以具备自己的导航体系。开发者构建出与每个Tab相对应的视图控制器或导航控制器,而Cocoa Touch则会把这些视图的相关细节处理好。

    比方说,标签栏上面同时出现的视图控制器如果超过一定数量,那么用户就可以通过More>Edit画面来定制他们。在这个画面中,用户可以把自己喜欢的控制器拖放到屏幕顶部的按钮栏中。开发者不用编写额外的代码,就能为程序添加自由调整Tab的功能,我们要做到有时配置一下customizableViewControllers属性。

4、分栏视图控制器

    这种视图控制器适用于平板电脑上面的应用程序,UISplitViewController类可以把一组固定的数据封装起来,并将它们和细节展示界面相关联。iPad的mail程序里就会出现这种分栏视图。在横屏模式下,消息列表出现在屏幕左侧,而每个消息的内容则显示在右侧。右侧的细节视图从属于左侧的主视图。点击某条消息之后,右侧的视图就会随之更新,并将这条消息的内容显示出来。

    在竖屏模式下,主视图通常是隐藏起来的。用户点击分栏视图左上角的按钮,程序就会把主视图以popover的形式展现出来。

5、页面视图控制器

    与导航控制器、标签栏控制器、分栏视图控制器等相似,页面视图控制器也是存放其他视图控制器的一种容器。它以页面为单位来管理其内容,并且可以用书本那样的翻页形式或是滚动形式来展示这些内容。如果开发者要使用翻页模式,就需要设置书脊,一般来讲,书脊位于视图左侧或者顶部。然后,我们把每个视图控制器当作书中的一页内容,添加到页面视图控制器里面,以便制作好这本书。用户可以通过翻页或者拖拽操作在页面之间切换。

6、popover控制器

    popover控制器专门用于平板电脑,这种控制器会在现有的界面内容上弹出临时的视图。popover控制器所展示出来的信息和一般的模态视图相似,都不会占据整个屏幕。用户通常是通过点击界面里的UIBarButtonItem来弹出这种popover的,当操作完popover中的内容,或是在主视图范围以外点击屏幕时,popover就会消失。

    popover的内容通常由另一个视图控制器来填充。我们可以先把那个视图控制器构建好,并将其设为popover的contentViewController属性,然后再把popover显示出来。通过这种极为灵活的编程技巧,我们可以把能够放在标准视图控制器中的任意内容都展示到popover里面去。

取自iOS核心开发手册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值