问题描述:在创建viewControl的同时创建了xib,将xib的控件拉入.m
中,在进行控件赋值的时候发现控件为nil
。
先了解一下xib中的空间是在什么时候加入到viewControl中,也就是view是在什么时候创建的。
- 1.执行
viewDidLoad
方法和loadView
方法- 发现
loadView
在viewDidLoad
之前执行。
- 发现
- 2.探索
loadView
方法- 调用时机:当
调用到viewControl的view,并且view为nil
时 - 作用:创建view赋值给viewControl
- 调用时机:当
经过实验viewDidLoad
和loadView
是在push后才执行的。
所以你在push前做的控件赋值都是执行不了的。
因为loadView
还未执行,控件为nil
。
解决方法:
- 1.通过
[vc loadViewIfNeeded]
或者[vc loadView]
去执行loadView
,先创建出view,然后进行赋值。例如:
UIViewController *vc = [[UIViewController alloc] init];
[vc loadView];// or [vc loadViewIfNeeded];
vc.label.text = @"我是帅哥";
[weakSelf.navigationController pushViewController:vc animated:YES];
- 2.在
viewDidLoad
后执行赋值。例如:
- (void)viewDidLoad {
[super viewDidLoad];
_label.text = @"我是帅哥";
}
总结:
需要了解VC的创建流程。
网友评论