- 自定义视图
- 视图控制器指定自定义View
- 检测屏幕旋转
- 处理内存警告
- 容器视图控制器
一.自定义Label - textField 视图
对应我们程序员来说我们不仅需要实现功能,还需要写出高质量的代码
高质量代码的特点: 可复用,可移植,等. 比如说这个工程我要用到的东西, 可以移植到另一个工程(有相似界面的过程),直接就可以用了.
为了达到高质量代码的目的,很多时候我们需要对代码进行优化,这个时候就要用到自定义视图.
自定义视图:顾名思义 就是自己组合定义的新的视图
好处:提高工作效率 大大提高代码的复用性
登录界面大家肯定都看到过,它的特点是: 一个UITextField前紧跟着一个UILable
我们可以用自定义视图的方法,将UITextField,UILabel封装一起,以后创建自定义视图,就有这两个了.
自定义视图的步骤:
1. 创建一个继承于UIView的子类
2. 重写子类的自定义初始化方法(这个初始化方法是用来添加你想要组合的控件)
3. 把想添加的控件(视图) 封装到新的子类里面(在里面进行初始化)
当然需要的话,也可以把这个自定义视图继续封装到另一个子视图
切记:如果用循环创建视图的话,需要用到tag, 将相应的属性(声明好的)与循环的那个相关联
这里还需要注意的是各个iphone设备的大小不一样,所以很多时候我们不会直接指定视图具体的frame, 很多时候是用获取的屏幕的宽高来写,这是就需要用到宏替换,宏替换很多时候让我们修改起来也会比较方便
二.视图控制器 UIViewController
作用: 控制视图显示,响应事件 实现模块独立,提高复用性
主要功能: 控制视图大小变换,布局视图,响应事件
检测以及处理内存警告
检测已经处理屏幕旋转
检测视图的切换
这里不得不提到MVC模式 ,UIViewController是MVC的核心
MVC是一种设计模式,一种思想
优点:视图复用, 降低耦合度
应用:
1. 视图层(UIView)只写视图的布局
2. 数据模型层(model)只写数据的结构(只写NS开头的)
3. 控制器(Controller)负责逻辑部分(例如从medel取出数据 然后去更改视图的显示)
MVC把工程中的代码模块化(降低耦合度)尽量让视图部分的代码可以复用 一般一个视图控制器控制一个页面
步骤:
1.创建一个根视图控制器
2.给window设置一个根视图控制器
3.设置根视图控制器 = 新建的根视图控制器
4.在控制器中实现逻辑
loadView 加载视图方法 调用父类的加载方法 或者加载自定义的视图
每一个视图控制器都自带一个view 并且这个view跟屏幕一样 viewDidLoad 视图已经加载完成 一般在这里里面写东西
三. 屏幕旋转
屏幕横屏时 改变原来的布局
屏幕竖屏时 改回原来的布局
步骤: 1. 允许屏幕旋转 shouldAutorotate
2. 指定屏幕旋转的方向 正常 头朝下 左 右
3. 找到旋转时触发的方法 (旋转时屏幕的宽高发生变化)
4. 判断屏幕方向 改变布局
5. 测试
第4步具体的是: 重新布局子视图 frame发生变化的时候会触发layoutSubViews方法
frame发生变化 相当于横屏竖屏发生变化 这时需要重新布局 判 断横屏还是竖屏
a.把应用程序取出来 UIApplication
b. 判断一下当前的应用程序 屏幕的朝向
记: 单例的方法的命名规范share什么
切记:判断横竖屏后改变frame,而不是重写初始化一个新的出来
四.内存警告
内存警告有一个方法:didReceiveMemoryWaring
内存警告后需要我们释放已经显示过的视图 并且不是当前显示的视图 如果这个视图正在被显示 那么这个视图的window的属性不能为空
视图声明周期: 将要出现 已经出现 将要消失 已经消失
五.容器视图控制器
相当于一个数组,把试图控制器放在里面
需要注意的:
一个Controller一般对应会有相应的一个view(显示视图的,不是自带的那个)
一般调用方法时,如果没有父类方法的,很多时候需要调用父类方法(后面没有参数的一般都要)
添加视图时,需要注意视图覆盖的问题,有时需要把后添加的视图放在最后面