- 创建窗口
- 设置窗口的根控制器
- 登录控制器
- alloc/initWithNibName:bundle:
- 创建xib,用xib描述登录控制器的view
- command + d 直接就可以复制一个新的控件
-
如果想要用xib去描述控制器的view必须要做两件事情
- 绑定类,告诉xib去描述哪一个控制器的view
- file‘s owner
- class: loginViewController
- 连线,告诉控制器xib当中哪一个view去描述控制器的view
- 选中file's owner 右击连线
- 绑定完类之后才能连线
- 如果initWithNibName:bundle:
- 如果指定了名称,就去加载指定名称的xib
- 如果指定的名称为nil,默认就去加载跟他相同名称的xib(LoginViewController.xib)
- 如果没有跟他相同名称的xib,会去加载跟他相同名称,去掉controller的xib(LoginView.xib)
- 如果alloc/init
- init方法底部调用了initWithName:bundle:
- 创建控制器的同时,创建xib,内部已经绑定好类,连好线,加载相同名称的xib
loadView
- 凡是在类扩展里声明的属性带*的默认都是没有值,必须要创建(数组、控件)
- 只要重写了loadView就说明控制器的view要自己创建
- loadView的默认做法
- 当前控制器是否在storyboard中加载,如果是从storyboard加载,就从storyboard中创建view,给当前控制器赋值
- 如果不是从storyboard中加载,就去看,当前控制器有没有xib来描述view,如果有,就会从xib当中创建view
- 如果也没有xib描述,那么他就会创建一个空的view
- loadView当控制器view第一次使用的时候调用
- 在控制器的view的get方法中调用
- 控制器的view是懒加载
//只要重写了loadView就说明控制器的view要自己创建
- (void)loadView{
UIView * view = [UIView alloc]init]
self.view = view;
}