iOS开发--控件初始化

一个控件有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的真实类型

封装控件的基本步骤:

    1. 在initWithFrame:方法中添加子控件,提供便利构造方法
    1. 在layoutSubviews方法中设置子控件的frame,必须调用[super layoutSubviews];
    1. 增加模型属性,在模型属性set方法中设置数据到子控件上

你可能感兴趣的:(iOS开发--控件初始化)