// Test.xib --编译--> Test.nib // 方式1 NSArray *objs = [[NSBundle mainBundle] loadNibNamed:@"Test" owner:nil options:nil]; [self.view addSubview:objs[3]];//3代表控件再Test.xib中的位置顺序
// 方式2 // 一个UINib对象就代表一个xib文件 // UINib *nib = [UINib nibWithNibName:@"Test" bundle:[NSBundle mainBundle]]; // 一般情况下,bundle参数传nil,默认就是mainBundle UINib *nib = [UINib nibWithNibName:@"Test" bundle:nil]; NSArray *objs = [nib instantiateWithOwner:nil options:nil]; [self.view addSubview:objs[2]];//2代表控件再Test.xib中的位置顺序
//加载xib文件的初始化方式: //该初始化方式 不能访问子视图的子视图 -(instancetype)initWithCoder:(NSCoder *)aDecoder { self=[super initWithCoder:aDecoder]; if (self) { NSLog(@"~~~~@"); } return self; } //最好用这种方式 -(void)awakeFromNib { NSLog(@"~~~~!"); }
一个控件有2种创建方式
通过代码创建
初始化时一定会调用initWithFrame:方法
通过xibstoryboard创建
初始化时不会调用initWithFrame:方法,只会调用initWithCoder:方法
初始化完毕后会调用awakeFromNib方法
有时候希望在控件初始化时做一些初始化操作,比如添加子控件、设置基本属性
这时需要根据控件的创建方式,来选择在initWithFrame:、initWithCoder:、awakeFromNib的哪个方法中操作