iOS开发--控件初始化
2019-05-05 本文已影响12人
Caesar_62dd
一个控件有2种创建方式:
1.通过代码创建,初始化时一定会调用initWithFrame:方法
2.通过xib\storyboard创建,
初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法,初始化完毕后会调用awakeFromNib方法有时候希望在控件初始化时做一些初始化操作,比如添加子控件、设置基本属性.这时需要根据控件的创建方式,来选择在initWithFrame:、initWithCoder:、awakeFromNib的哪个方法中操作
Xib和storyboard对比
共同点:
都用来描述软件界面
都用Interface Builder工具来编辑
本质都是转换成代码去创建控件
不同点:
Xib是轻量级的,用来描述局部的UI界面
Storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系
Xib的加载
方法1
NSArray *views = [[[NSBundle mainBundle] loadNibNamed:@"xib文件名" owner:nil options:nil] firstObject];
方法2
UINib *nib = [UINib nibWithNibName:@"xib文件名" bundle:nil];
NSArray *views = [nib instantiateWithOwner:nil options:nil];
懒加载
接下来通过代码来解析Plist文件中的数据
获得Plist文件的全路径
NSBundle *bundle = [NSBundle mainBundle];
NSString *path = [bundle pathForResource:@"shops" ofType:@"plist"];
_shops = [NSArray arrayWithContentsOfFile:path];
Plist文件
直接将数据直接写在代码里面,不是一种合理的做法。如果数据经常改,就要经常翻开对应的代码进行修改,造成代码扩展性低
因此,可以考虑将经常变的数据放在文件中进行存储,程序启动后从文件中读取最新的数据。如果要变动数据,直接修改数据文件即可,不用修改代码
一般可以使用属性列表文件存储NSArray或者NSDictionary之类的数据,这种“属性列表文件”的扩展名是plist,因此也称为“plist文件”
instancetype类型与id类型
instancetype在类型表示上,跟id一样,可以表示任何对象类型
区别:
1. instancetype只能用在返回值类型上,不能像id一样用在参数类型上
2.instancetype比id多一个好处:编译器会检测instancetype的真实类型
封装控件的基本步骤:
- 在initWithFrame:方法中添加子控件,提供便利构造方法
- 在layoutSubviews方法中设置子控件的frame,必须调用[super layoutSubviews];
- 增加模型属性,在模型属性set方法中设置数据到子控件上