IOS开发入门基础(三):视图控制器的概念及其创建方法(1)

一、视图控制器

视图控制器是应用数据和UI的 中间件,在 MVC设计模式中,那么视图控制器担当了MVC中控制层的角色,是 APP 的骨架。使用视图控制器可以方便的管理视图中的子视图,主要是管理 UIView,如下图所示。

IOS开发入门基础(三):视图控制器的概念及其创建方法(1)

UIVewController 和UIView是什么关系呢?UIView不是也能添加子视图完成一些操作吗?我们举一个简单地例子来说明二者之间的关系。将UIViewController比作是一个电视屏幕,UIView比作各种频道,我们可以通过电视观看想要看的频道。UIView的作用是向用户展现要表现的内容,并接收用户交互,而UIViewController负责安排底下UIView的表现形式,比如视图翻转效果,淡入淡出效果等。

在一个使用了storyboard 的应用打开时,iOS 操作系统做下列的工作:

1 、iOS 初始化一个window 给你

2 、iOS 加载storyboard ,实例化storyboard 的initial view controller

3 、iOS 将window 的属性rootViewController 值设置为新的视图控制器,然后使得window 在屏幕上可见。

这是storyboard 机制自动做的工作,如果手工编码,需要这样做。

UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

-- 初始化一个window

UIViewController *vc = [[UIViewController alloc] init];

-- 实例化一个视图控制器

window.rootViewController = vc;

-- 将该视图控制器设置为window 的属性rootViewController 的值。

[window makeKeyAndVisible];

-- 使得window 聚焦并可见。

二、视图控制器的生命周期

1、视图控制器的加载

视图控制器在管理与之关联的视图时,系统规定只有当应用需要视图时才会加载视图,而在不需要时卸载视图,以节省系统的资源。视图控制器本身有 view 视图,系统直接调用[self loadView] 方法,也可以重写此方法。下图是 view 加载过程。

IOS开发入门基础(三):视图控制器的概念及其创建方法(1)

用户在子类中重写了loadView方法,系统就会使用用户自定义方法创建视图,我们在重写loadView方法中,要创建一个view视图赋值给视图控制器的view属性;如果用户在子类中调用父类的loadView方法[super loadView],可能就会三种创建视图的情况,第一种是通过StoryBoard,第二种是通过XIB文件,第三种则是直接创建一个空的视图。

加载案例http://blog.csdn.net/iphone5solo/article/details/47778683

2、视图控制器的显示与消失

UIViewController会在特定的时间调用以下4个方法。

·viewWillAppear:当视图控制器对象的视图即将加入窗口。

·viewDidAppear:当视图控制器对象的视图已经加入窗口。

·viewWillDisappear:当视图控制器对象的视图即将消失、被覆盖或隐藏。

·viewDidDisappear:当视图控制器对象的视图已经消失、被覆盖或隐藏。

我们在编写程序中可以发现,UIViewController中的这些方法都是空的,不做任何事情,它只是提供子类覆盖。

- (void)viewWillAppear:(BOOL)animated;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewWillDisappear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

虽然UIViewController只创建一次,但是与之关联的视图会显示与消失多次,所以覆盖这4个方法在视图每次显示或消失时产生特定的效果是比较重要的,比如每次显示视图时都刷新当前的系统时间,或者在应用中每次刷新当前在前的人数等。我们会在模态视图中详细介绍这4个方法的使用。

3、视图控制器的卸载

如果不需要用到视图是,需要将视图进行卸载操作,图展现了视图的卸载过程。

IOS开发入门基础(三):视图控制器的概念及其创建方法(1)

当系统发出警告或者调用didReveiveMemoryWarning时,系统会判断当前是否有视图,视图是否能被卸载,如果能得话,就会卸载当前的视图,调用viewWillUnload方法后释放掉当前view。然后再调用viewDidUnload方法,在图中右侧可以看到与视图控制器关联的视图已经为nil,表明视图卸载成功。

三、视图控制容器(View Controller Container)

像UINavgationController、UITabBarController、UISplitViewController等都属于view controller container这些类的共性是都有一个类型为数组的对象viewControllers属性,用于保存一组视图控制器。view controller container会有自己默认外观。

任何view controller container对象都可以通过viewControllers属性来访问子对象(视图),而子对象也可以通过navigationController, tabbarController, splitViewController, parentViewController找到相应的view controller container。

IOS开发入门基础(三):视图控制器的概念及其创建方法(1)

四、视图控制器的创建方法

视图控制器的创建方法有3种,基于 storyboard 的创建方法,基于 xib 的视图控制方法,和代码控制方法。详细见本人的视频教程。

展开阅读全文

页面更新:2024-05-21

标签:视图   控制器   被覆   方法   重写   初始化   实例   属性   入门   加载   对象   概念   窗口   效果   过程   基础   用户   系统   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top