模型与字典
1. 用模型取代字典的好处
使用字典的坏处
- 编译器没有自动提醒的功能,需要手敲
- key如果写错了编译器也不会报错
2. 模型概念
概念
特点
- 一般继承自NSObject
- 在.h文件中声明一些用来存放数据的属性
注释
- //单行注释
- / /多行注释
- /* /文档注释,调用属性时会显示出来文档注释
使用模型的好处
- 模型设置数据和取出数据都是通过它的属性,属性名如果写错了,编译器会马上报错,因此,保证了数据的正确性
- 使用模型访问属性的时候,编译器会提供一系列的提示,提高编码效率
3. 九空格
创建步骤
商品
- 懒加载
- 创建一个可变数组
- 获取plist的全路径
- 获取plist中的字典数据
- 将字典数组转换成模型数组
- 将模型数组添加到模型数组中
添加
- 总列数
- 获取当前商品的索引
- 设置商品的宽度和高度
- 设置商品的位置
- 创建一个父控件
- 将父控件添加到大的View中
- 添加一个图片
- 添加文字
- 设置数据
- 设置按钮的状态
删除
- 设置按钮的状态
- [self.shopsView.subviews.lastObject removeFromSuperview];//删除最后一个元素
assign
weak
- OC对象类型(比如NSArray,NSDate,NSNumber,模型类)
- 一般使用在UI控件上
strong
- OC对象类型(比如NSArray,NSDate,NSNumber,模型类)
- 一个对象只要有强引用引用着,就不会被销毁
copy
5. 通过纯代码创建自定义控件
- 继承自系统自带的控件,写一个属于自己的控件
- 目的:封装控件内部的细节
- 步骤
- 新建一个继承
UIView
的类
- 在
initWithFrame
方法中添加子控件
- init内部会自动调用initWithFrame方法
- 因此应该重写initWithFrame方法
- 在
layoutSubViews
(子控件布局)中设置子控件的frame
- 当空间的尺寸发生改变时就会调用layoutSubViews
- 一定要先调用[super layoutSubViews];
- 提供一个模型属性,重写模型属性的set方法
6. 通过Xib自定义控件
步骤
- 新建一个继承
UIView
的类
- 新建一个
xib
文件(文件名最好跟控件类名一样)
- 添加子控件
- 设置子控件的属性
- 修改最外面的控件class为控件的类名
- 将子控件进行连线
- 提供模型属性,重写模型的set方法
xib文件编译成功后就是nib文件
加载方式
如果bundle mainbundle的参数是nil,默认去mainbundle中找
NSArray *views = [[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil option:nil];
方法2
UINib*nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil option:nil];
步骤
- 新建自定义控件类
- 新建Xib文件
- 修改xib中view的类名(只能修改成同类型的类)
- 封装xib的加载过程
- 拖线
- 增加模型属性,在模型属性的set方法中设置数据到子控件上
xib和storyboard对比
共同点:
- 都用来描述软件界面
- 都用Interface Builder工具来编辑
- 本质都是转换成代码去创建控件
不同点
- Xib是轻量级的,用来描述局部的UI界面 S toryboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系
6. 知识点
- 如果这个控件不是通过xib\storyboard创建,初始化时会调用initWithFrame:(CGRect)frame;
- 如果是通过xib\storyboard创建,初始化时会调用initWithCoder:(NSCoder *)aDecoder;
- 如果是通过xib\storyboard创建,初始化完毕后会调用awarkFromNib
- Xib与storyboard对比
7. 类前缀
- NS --> Next Step
- UI --> User Interface
- AV --> Audio Player
plist文件
- 一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件”
1.解析Plist文件
2.使用注意