加载xib的两种方式
UIView *carView = [[[NSBundle mainBundle] loadNibNamed:@"CarView" owner:nil options:nil] lastObject];
carView.frame = CGRectMake(0, 20, 375, 110);
[self.view addSubview:carView];
UINib *nib = [UINib nibWithNibName:@"CarView" bundle:nil];
UIView *carCiew = [[nib instantiateWithOwner:nil options:nil] lastObject];
[self.view addSubview:carCiew];
- 加载效果同上
- 注意:
- 如果view从xib加载,就不会调用[[xxx alloc]init];和[[xxx alloc]initWithFrame]方法,会调用[[xxx alloc]initWithCoder]
- 如果想要用代码在xib上添加子视图,那么就必须在 [xxx alloc]initWithCoder]中用代码创建相应的视图,并在- (void)layoutSubviews中布局子控件
- 如果子控件是从xib中创建,处于未唤醒状态,所以不能直接在子控件中添加控件, 所以此时应唤醒子控件,唤醒方法是- (void)awakeFromNib方法,这样就可以在该方法中添加子控件
xib的加载原理