XIB的两种加载方式
方式一:NSArray*views = [[NSBundle mainBundle] loadNibNamed:@"Empty" owner:nil options:nil];
方式二:
UINib *nib = [UINib nibWithNibName:@"Empty" bundle:nil];
UIView *view = [[nib instantiateWithOwner:nil options:nil] lastObject];
我们在使用的时候,可以在view的.m文件里写类方法或者写对象方法来使用上述的家在方法来使用xib.
如果想在定义好的xib上添加视图,要重写 initWithCoder方法(此方法添加的xib的子控件)。但是此方法添加的视图是在xib还未被唤醒的时候添加的xib已经创建,但未唤醒,依然没展示在视图上。所以要重写唤醒xib的方法(来添加xib中创建的子控件的子控件),- (void)awakeFromNib;
如果一个view从xib中加载,就不能用alloc init 和initWithFrame来创建
如果一个xib经常被使用,应该提供快速构造的类方法
如果一个view是从xib中加载,想要在view上用代码添加一些子控件,要用initWithCoder和awakeFromNib来创建
XIB的加载原理
- (UIView)loadFromNib ->
xib的xml代码->
initWithCode转化xml的代码(拿到需要的view和属性)->
唤醒->展示到视图上