视图控制器是应用数据和UI的 中间件,在 MVC设计模式中,那么视图控制器担当了MVC中控制层的角色,是 APP 的骨架。使用视图控制器可以方便的管理视图中的子视图,主要是管理 UIView,如下图所示。
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 加载过程。
用户在子类中重写了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、视图控制器的卸载
如果不需要用到视图是,需要将视图进行卸载操作,图展现了视图的卸载过程。
当系统发出警告或者调用didReveiveMemoryWarning时,系统会判断当前是否有视图,视图是否能被卸载,如果能得话,就会卸载当前的视图,调用viewWillUnload方法后释放掉当前view。然后再调用viewDidUnload方法,在图中右侧可以看到与视图控制器关联的视图已经为nil,表明视图卸载成功。
像UINavgationController、UITabBarController、UISplitViewController等都属于view controller container这些类的共性是都有一个类型为数组的对象viewControllers属性,用于保存一组视图控制器。view controller container会有自己默认外观。
任何view controller container对象都可以通过viewControllers属性来访问子对象(视图),而子对象也可以通过navigationController, tabbarController, splitViewController, parentViewController找到相应的view controller container。
视图控制器的创建方法有3种,基于 storyboard 的创建方法,基于 xib 的视图控制方法,和代码控制方法。详细见本人的视频教程。
页面更新:2024-05-21
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号