视图控制器

功能:视图大小变换 \布局视图\响应事件\检测处理内存警告\检测以及处理屏幕旋转\检测视图切换

MVC (model View controller)

UIViewController是MVC设计模式的核心.

MVC是一个框架级的设计模式

M是Model,主要⽤于建⽴数据模型(即数据的结构)

V是View,我们能看到的所有控件都是view,view主要的功能是展⽰数据。

C是控制器,主要是控制M和V的通信

V只负责显示不负责事件处理.

一些button事件应该在控制器中写方法,不要再button建立时候写

 1.在自定义View中添加控件

2.千万不要在View添加点击事件

 

controller主要控制M和V的通信.

如何使用:

1.定义UIViewController的子类

2.创建视图控制器对象,作为window的根视图控制器

3.viewDidLoad中使用默认创建好的视图对象view(self.view)

每一个视图控制器被实例化的时候都天生有一个View属性,这个View就是他自己管理的那个View

需要了解控制器中方法的执行顺序,可以更好的控制视图

.视图控制器指定自定义View

//视图控制器自带的View是一个空白的View

//如果我们实现一个loginView,我们需要在空白的View上面添加很多的控件

A view controller is usually owned by a window or another view controller.

当调用到View的时候就会加载视图了.

lazy loading:需要的时候加载,不需要的时候一定不加载.如果一直不调用view那么就一直不会加载

如何设置

⾃定义视图类继承UIView。在初始化⽅方法中添加子视图控件。

重写controller的loadView方法。创建⾃定义视图对象,并指定为controller 的view。

将⼦视图控件对象设置为自定义视图类的属性,在viewController中进⾏设 置:添加action、设置delegate等。

在controller中添加按钮点击事件实现和代理⽅法的实现

屏幕旋转

检测屏幕旋转

视图控制器本⾝身能检测到屏幕的旋转,如果要处理屏幕旋转,需要重写⼏几个⽅法:

1. supportedInterfaceOrientations(设置设备支持旋转的方向)

2. willRotateToInterfaceOrientation:duration:(暂停音乐、关闭视图交互等)

3. willAnimateRotationToInterfaceOrientation:duration:(添加⾃定义动画 等)

4. didRotateFromInterfaceOrientation:(播放音乐、打开视图交互等)

视图处理

注意视图控制器会⾃动调整view的⼤小以适应屏幕旋转,bounds被修改,触发view的layoutSubviews⽅方法。

view重写layoutSubviews⽅法,根据设备方向,重新布局。

[UIApplication shareApplication].statusBarOrientation提供设备 当前⽅向。

处理内存警告

控制器能监测内存警告,以便我们避免内存不够引起的crash。

在定义的controller⼦类中重写didReceiveMemoryWarning方法。

释放暂时不使用的资源。(数据对象、图像)

容器视图控制器

常用方法

self.view显⽰示:viewWillAppear: 和 viewDidAppear:

self.view消失:viewWilDisappear: 和 viewDidDisappear:

当self.view添加到⽗视图上时,执行appear方法;当self.view从⽗视图上移除时,执⾏disappear方法。

演示执行顺序

定义FirstViewController、SecondViewController类,first作为window的根视图控制器。

将SecondViewController的view添加到FirstViewController的view上。

将SecondViewController的view移除。

查看SecondViewController中4个方法的执行顺序。

对iOS程序执行流程的理解(摘录)

程序到底是怎么执行的? 1. 当你单击iPhone上的应用程序图标的时候,系统就会查找这个程序的入口地址,即main函数在内存代码区的首地址.然后执行main函数里的程序,这里main函数里仅有一句: return UIApplicationMain(argc, argv, nil, NSStringFromClass([ZHAppDelegate class]));

2. 上面的这句话有什么作用呢?他会创建一个单例的application对象,这在系统中表征这个程序的存在,生命周期;建立事件循环,如不断的检查程序的运行状态,是否被触摸,摇晃等;还有就是建立一个application的delegate,delegate的作用是根据应用程序的状态并作出相应的处理,比如程序启动了,进入活跃状态,进入非活跃状态,将要进入前台,将要进入后台,程序将要结束等消息.这是主程序传递过来的又delegate代理完成的,因为主程序的侧重点不在此(猜测),

3. 那么这个代理的具体都做些什么事呢?在程序加载的时候,主程序会根据不同的情况给代理发送相应的消息,处理上面代理完成的辅助功能外,最总要的时delegate会创建一个window,这个window像个画板一样把视图呈现给用户.如果我们使用mvc模式设计程序,那么我们会把window的管理权交给一个叫做controler(管理器),也就是mvc中的c来管理.controler的作用是用来往window上加载视图,这里我们可以猜测,controller原则上可以有很多个,哪个controler拥有了对window的管理权,谁就可以往window上加载视图.

4. Controller的都有什么作用或者controler是怎么工作的呢?加载视图的时候首先会初始化函数(或者实例化)一个controler类的对象,由它来调用自己所在类的方法管理视图,controller所在的类都有哪些方法呢?最典型的方法有loadView方法(加载视图). viewDidLoad(视图加载完成), didReceiveMemoryWarning(内存警告)等.

ViewController的生命周期包括: 
Initialize 
ViewDidLoad 
ViewWillAppear 
ViewDidAppear 
ViewWillDisappear 
ViewDidDisappear 
ViewDidUnload 
Dispose

对于Application来说,ViewController的每个阶段都对应了一个方法,IOS会在适当的时间调用对应的方法,因此,我们可以在每个方法中添加对应的代码来做我们想做的事。需要注意的是,这些方法都是为ViewController服务的,对于Views对象来说,是没有这些方法的。 
       View的生命周期方法如下:

* ViewDidLoad - Called when you create the class and load from xib. Great for initial setup and one-time-only work

* ViewWillAppear - Called right before your view appears, good for hiding/showing fields or any operations that you want to happen every time before the view is visible. Because you might be going back and forth between views, this will be called every time your view is about to appear on the screen

* ViewDidAppear - Called after the view appears - great place to start an animations or the loading of external data from an API.

* ViewWill/DidDisappear - Same idea as the WillAppear.

* ViewDidUnload/Dispose - Available to you,  In objective-c, this is where you do your cleanup and release of stuff, but this is handled automatically so not much you really need to do here.

Application的生命周期包括: 
      在IOS中,生命周期就是由一系列的方法构成, 对于一个App来说,涉及到的生命周期有: 
1、点击icon启动,对应的方法有: 
      didFinishLaunchingWithOptions: 
      applicationDidBecomeActive: 
2、按下Home键,返回桌面,对应方法: 
      applicationWillResignActive 
      applicationDidBecomeInactive 
3、再点击icon回到前台,对应方法: 
      applicationWillEnterForegroud 
      applicationDidBecomeActive 
4、Application忽然被终止,对应方法: 
     applicationWillTerminate 
     这儿需要注意,点2下home键,把后台程序关掉不会调用这个方法,在苹果的IOS开发指南上有如下描述: 
”Even if you develop your application using iPhone SDK 4 and later, you must still be prepared for your application to be terminated. If memory becomes constrained, the system might remove applications from memory in order to make more room. If your application is currently suspended, the system removes your application from memory without any notice. However, if your application is currently running in the background, the system does call the applicationWillTerminate:method of the application delegate. Your application cannot request additional background execution time from this method.“ 就是说,在机器内存不足时,IOS会清理后台程序,在这个时候会调用该方法,一般情况下,很少会用到这个方法,尽量不要在这个方法里写你的应用逻辑。

UI学习笔记---第三天的更多相关文章

  1. sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)

    sql server 关于表中只增标识问题   由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...

  2. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  3. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

  4. X-Cart 学习笔记(三)X-Cart框架2

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 3.了解 ...

  5. Dynamic CRM 2013学习笔记(三十三)自定义审批流4 - 规则节点 -有分支的流程处理

    上次介绍过节点的基本配置<Dynamic CRM 2013学习笔记(三十二)自定义审批流3 - 节点及实体配置>,这次介绍下规则节点,因为有时流程里会有一些分支.合并,这时就要用到规则节点 ...

  6. Dynamic CRM 2013学习笔记(三十七)自定义审批流7 - 初始化(整套审批流下载、安装)

    前面介绍了自定义审批流的配置.使用,这篇介绍下如何进行初始化. 一. 下载 从下面的地址下载整个审批流: http://yunpan.cn/cZ5Rdx5HCt3VF 下载完后,一共有三块内容: 二. ...

  7. .NET Remoting学习笔记(三)信道

    目录 .NET Remoting学习笔记(一)概念 .NET Remoting学习笔记(二)激活方式 .NET Remoting学习笔记(三)信道 参考:♂风车车.Net .NET Framework ...

  8. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  9. C#数字图像处理算法学习笔记(三)--图像几何变换

    C#数字图像处理算法学习笔记(三)--图像几何变换 几何图像处理包括 图像的平移变换,镜像变换,旋转变换,伸缩变换,在这里仅以水平镜像为例,通过代码来理解其基本操作方式: 翻转前:

随机推荐

  1. Python中的*args和**kwargs

    原文地址:http://www.linuxidc.com/Linux/2011-10/45083.htm 先来看个例子: ,2,3,4) foo(a=1,b=2,c=3) foo(1,2,3,4, a ...

  2. sql语句查询重复的数据

    查找所有重复标题的记录: SELECT *FROM t_info aWHERE ((SELECT COUNT(*)FROM t_infoWHERE Title = a.Title) > 1)OR ...

  3. 告别硬编码-发个获取未导出函数地址的Dll及源码

    还在为找内核未导出函数地址而苦恼嘛? 还在为硬编码通用性差而不爽吗? 还在为暴搜内核老蓝屏而痛苦吗? 请看这里: 最近老要用到内核未导出的函数及一些结构,不想再找特征码了,准备到网上找点符号文件解析的 ...

  4. 从QQ网站中提取的纯JS省市区三级联动

    在 http://ip.qq.com/ 的网站中有QQ自己的JS省市区三级联动 QQ是使用引用外部JS来实现三级联动的.JS如下:http://ip.qq.com/js/geo.js <!DOC ...

  5. WordPress 4.0 “Benny” 正式发布

    http://wordpress.org/news/2014/09/benny/Highlights and What’s New:http://codex.wordpress.org/Version ...

  6. IOS开发中--点击imageView上的Button没有任何反应

    点击imageView上的Button没有任何反应:    解决方法:设置图片的userInteractionEnabled为YES,使该imageView可以与用户进行交互

  7. windows azure中国 里面建立一个虚拟机,与虚拟机建立通信 里面部署IIS,外网访问

    在windows azure中国 里面建立一个虚拟机,里面部署IIS,外网不能访问么? 外网访问的地址是给的那个DNS地址 ,比如我的是 DNS 名称 urbanairserver.cloudapp. ...

  8. iframe中的jquery ui modal dialog 覆盖父窗口

    在iframe中 使用jquery ui dialog,弹出后可以覆盖父窗体 ///iframe中的jquery ui modal dialog 覆盖父窗口 function openDialog() ...

  9. Centos6升级内核2.6到3.x过程

    最近公司有一个应用,安装需要内核版本3.1以后,不得已,需要升级下内核版本: 1. 安装必要依赖 # yum groupinstall "Development Tools" #y ...

  10. ODI 12.1.3创建standalone代理

    首先要安装ODI. ODI安装 如果没有安装WLS,则可以选择独立安装,如下图.