iOS开发之旅之UIViewController解析
就iOS开发来说,UIViewController就最核心的类型之一。而iOS的整个UI开发的核心思想也是MVC的架构,从UIViewController的命名就可以看出它在MVC中所扮演的角色,那就是Controller啦。
Controller作为整个UI视图的控制器,对于用户的输入做出逻辑处理,例如用户点击某个按钮应该执行什么操作等;View角色只负责显示视图,view的这部分就是我们在nib或者storyboard设计的UI了。Model也就是我们的数据模型,例如从Core data中加载的实体类等等。这整个架构分工清晰,降低了代码的耦合度。今天我们要学习的角色就是Controller。
UIViewController与UIWindow、UIView的关系如下 图所示:
UIWindow在现实时会设置一个root controller,然后会将该root controller的root view设置为该window的root view,root view又管理着整个视图的层次结构,这样就构建起了用户界面,并且相互之间耦合性较低。
按照官方的定义,View Controller为iOS提供了基础的视图管理模型,也就是它就是负责管理视图的,管理视图的层级、大小、内容、交互等。iOS的SDK中提供很多原生ViewController,以支持标准的用户界面,例如表视图控制器(UITableViewController)、导航控制器(UINavigationController)、标签栏控制器(UITabbarController)和iPad专有的UISplitViewController等。
按结构可以对iOS的所有ViewController分成两类:
1、主要用于展示内容的ViewController,这种ViewController主要用于为用户展示内容,并与用户交互,如UITableViewController,UIViewController。
2、用于控制和显示其他ViewController的ViewController。这种ViewController一般都是一个ViewController的容器,例如UINavigationController,UITabbarController,它们都有一个属性:viewControllers,将所有要管理的View Controller添加到该数组就就行了,如图1。其中UINavigationController表示一种Stack式结构,push一个ViewController或pop一次,当前ViewController的导航栏上会显示上一个ViewController的Bar Button,点击该bar button可以返回上一个View Controller。而UITabbarController表示一个带有底部栏的视图控制器,底部栏按钮的个数就是ViewController的个数,各个ViewController是并列的,如图2。
图1 图2
UIViewController加载视图
UIViewController有两种加载方式,第一种是通过手动加载xib文件来加载视图,第二种是直接通过代码来创建View Controller中的师徒来加载。直接看示例吧。
方式一 :xib加载
在创建一个xib文件,将File‘s Owner设置为对应的UIViewController类型,然后关联File‘s Owner的view与xib中的root view(在创建UIViewController时自动创建了xib的话不需要这一步,只有分开创建时才需要手动建立关联,否则会报错。),然后通过如下代码即可创建:
// MainViewController *vc=[[MainViewController alloc]initWithNibName:@"MainViewController" bundle:nil]; // self.window.rootViewController = vc; MainViewController *vc=[[MainViewController alloc] init]; self.window.rootViewController = vc;
方式二:代码添加View
思路就是将View添加到UIViewController的root view中,在UIViewController启动时默认会从与其关联的xib或者storyboard中加载视图,如果没有找到则root view为nil。我们可以覆写loadView方法,通过代码的形式向里面添加view。代码如下 :
// 加载视图时绘制 -(void) loadView { UILabel* label = [[UILabel alloc] initWithFrame:[UIScreen mainScreen].applicationFrame] ; label.text = @"Draw The Text"; label.backgroundColor = [UIColor redColor] ; self.view = label; }然后直接通过alloc和init创建UIVIewController即可。
UIViewController的生命周期
ViewController生命周期会经历初始化、加载视图、销毁视图、生命结束等过程。
1)init方法
初始化ViewController本身。
2)loadView方法
当view需要被展示而它却是nil时,viewController会调用该方法,如果代码构建View的话需要重写此方法。
3)viewDidLoad方法
执行完loadView后继续执行viewDidLoad,loadView时还没有view,而viewDidLoad时view已经创建好了。
4)viewDidUnload方法
当系统内存吃紧的时候会调用该方法。
5)dealloc
释放其他资源或内存。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。