Xib和storyboard的對(duì)比
- 共同點(diǎn):
- 都用來描述軟件界面
- 都用Interface Builder工具來編輯
- 本質(zhì)都是轉(zhuǎn)換成代碼去創(chuàng)建控件
- 不同點(diǎn)
- Xib是輕量級(jí)的,用來描述局部的UI界面
- Storyboard是重量級(jí)的,用來描述整個(gè)軟件的多個(gè)界面,并且能展示多個(gè)界面之間的跳轉(zhuǎn)關(guān)系
Xib的加載
- 方法1:
NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"MJAppView" owner:nil options:nil];
這個(gè)方法會(huì)創(chuàng)建xib中的所有對(duì)象,并且將對(duì)象按順序放到objs數(shù)組中
(如果xib如右圖所示,那么objs數(shù)組中依次會(huì)有3個(gè)對(duì)象:1個(gè)UIView、1個(gè)UIButton、1個(gè)UISwitch)
- 方法2:
//bundle參數(shù)可以為nil,默認(rèn)就是main bundle
UINib *nib = [UINib nibWithNibName:@"MJAppView" bundle:[NSBundle mainBundle]];
NSArray *objs = [nib instantiateWithOwner:nil options:nil];
在開發(fā)階段,面向開發(fā)者的是xib文件; 當(dāng)把應(yīng)用裝到手機(jī)上時(shí),xib文件就會(huì)轉(zhuǎn)為nib文件
Xib自定義View
- 自定義控件類
- 新建xib文件(文件名和自定義控件類相同)
- xib關(guān)聯(lián)類
- 在自定義類中增加模型屬性,在模型屬性的set方法內(nèi)設(shè)置數(shù)據(jù)給子控件
注意點(diǎn)
- 一個(gè)控件有2種創(chuàng)建方式
- 通過代碼創(chuàng)建
- 初始化時(shí)一定會(huì)調(diào)用initWithFrame:方法
- 通過xib\storyboard創(chuàng)建
- 初始化時(shí)不會(huì)調(diào)用initWithFrame:方法,只會(huì)調(diào)用initWithCoder:方法
- 初始化完畢后會(huì)調(diào)用awakeFromNib方法
- 有時(shí)候希望在控件初始化時(shí)做一些初始化操作,比如添加子控件、設(shè)置基本屬性
- 這時(shí)需要根據(jù)控件的創(chuàng)建方式,來選擇在initWithFrame:、initWithCoder:、awakeFromNib的哪個(gè)方法中操作