UIViewController的详细介绍
2015-08-19 18:07
387 查看
UIViewController概念
视图控制器是应用程序数据和视图之间的重要桥梁,每个iOS应用程序只显示一个用户界面,显示的内容是由控制器或一组视图控制器协调管理。所以,视图控制器提供了一个基本的框架来构建应用程序。UIViewController是所有视图控制器的父类
iOS提供了许多内置的视图控制器类,以支持标准的用户界面部分,比如导航控制器
(UINavigationController),标签栏控制器(UITabBarController),表视图控制器(UITableViewController)等
视图控制器与视图的关系
视图控制器是传统的Model-View-Controller(MVC)设计模式中 —— 控制器对象视图控制器提供了许多控制器的基本功能,因为它是所有控制器的基类
视图控制器负责创建和管理一组视图,它本身就提供了一个视图,称为该控制器的根视图(view),协调管理数据和视图之间的交互
Screens, Windows、 Views创建可视化界面
Screens, Windows、 Views的层次关系
UIScreen对象是连接物理屏幕的标示UIWindow为UIScreen对象提供了一个画布
一组UIView对象就可以显示内容,当window对象相应他们的请求的时候,就开始画显示的内容
UIViewController的创建
UIViewController的创建有两种方式,一种是使用xib的方式来创建RootViewController是新建的一个类,新建RootViewController.xib
选中RootViewController.xib–>Custom Class(改成RootViewController)
另外一种是使用代码来创建视图
//创建每个控制器的根视图 UIView *rootView =[[UIView alloc]initWithFrame:[UIScreen mainScreen].applicationFrame]; self.view = rootView; self.view.backgroundColor = [UIColor redColor];
UIViewController生命周期
视图的加载过程
首先去访问view属性如果存在view,则直接加载。相反,如果不存在,则UIViewController调用loadView方法
loadView方法执行如下操作
如果你覆盖了该方法,则必须创建view给UIViewController的view属性 如果你没有覆盖该方法,UIViewController会调用父类的方法,通过viewDidLoad方法来执行一些其他任务
UIViewController加载视图方法的执行顺序
1、加载nib时会调用 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 2、没有正在使用nib视图页面,子类将会创建自己的自定义视图层 -(void)loadView 3、视图被加载后调用 -(void)viewDidLoad 4、视图即将出现的时候调用 -(void)viewWillAppear:(BOOL)animated 5、视图出现后的时候调用 -(void)viewDidAppear:(BOOL)animated 6、视图即将消失的时候调用 -(void)viewWillDisappear:(BOOL)animated 7、视图消失后的时候调用 -(void)viewDidDisappear:(BOOL)animated
视图的添加过程
视图的移除过程
视图的卸载过程
视图控制器的视图内存管理
视图控制器的事件传递流程
当前触发的事件——>当视图控制器的根视图——>视图控制器——>窗口——UIApplication对象——>不处理(忽略)
模态视图
模态视图不是专门的某个类,而是通过视图控制器的presentModalViewController:方法弹出的视图我们都称为模态视图模态视图出现的场景一般是临时弹出的窗口
模态视图弹出时通过modalTransitionStyle属性设置不同的动画效果
调用 dismissModalViewControllerAnimated: 方法关闭窗口
相关文章推荐
- iOS UIScrollView实现无限滚动,思路与代码
- iOS:UITextField中文输入法输入时对字符长度的限制
- 将webkit内核封装为duilib的浏览器控件
- 分享个Duilib中基于wke的浏览器控件
- HDU 2767--Proving Equivalences【scc缩点构图 && 求向图中最少增加多少条边才可以使新图强连通】
- sql server UI怎么设置自增加id?
- iOS SDK详解之UIToolBar
- 树莓派2在U8300W平台上用pppd拨号时出现“pppd: The remote system is required to authenticate itself”
- mysql 错误 SQL Error: 1366: Incorrect string value: "\xE8\xAF\xA6\xE7\xBB\x86…" for column "address"
- class priority_queue<> 简单介绍
- 多线程之四:NSOperation与NSOperationQueue
- quicksumpoj
- IOS第11天(4:UIDatePicker时间选择,和键盘处理,加载xib文件,代理模式)
- 小胖说事37-----iOS基础知识之UIScrollview的代理和Build Active Architecture Only属性
- String,StringBuffer与StringBuilder的区别??
- Ueditor编辑器的使用
- 算法(二)—分治法Divide-and-conque
- 逗比的坑——for (int i = 0; gc_handDataOutput->QueryNumberOfHands(); ++i)
- Duilib界面库Capture系列的相关bug解决
- UE3 材质函数