方式一
-
通过alloc init
1.创建窗口
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
2.创建控制器
XHViewController * vc = [[XHViewController alloc] init];
vc.view.backgroundColor = [UIColor whiteColor];
3.设置窗口跟控制器
self.window.rootViewController = vc;
4.设置窗口为应用程序主窗口
[self.window makeKeyAndVisible];
#####为了省事我把设置窗口的重复代码去掉了,都能看得懂
#####方式二
- 通过StoryBoard
通过Storyboard这个对象,就能加载storyboard文件注意:必须要有storyboard,创建UIStoryboard对象才有意义,alloc init创建UIStoryboard对象没有意义
1. instantiateInitialViewController:默认加载箭头指向的控制器
UIStoryboard * sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
XHViewController * vc = [sb instantiateInitialViewController];
2. instantiateViewControllerWithIdentifier:根据标识在storyboard查找控制器,标识和storyboard中必须一致
UIStoryboard * sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
XHViewController * vc = [sb instantiateViewControllerWithIdentifier:@"mainVC"];
- 现在创建的控制器都不能处理事件,如果需要处理事件,需要自定义控制器。
原因:当通过Storyboard ID找到storyboard中的控制器的时候,就会创建storyboard中描述的控制器对象,创建对象首先得知道类名,会根据storyboard中的Custom Class确定类名,然后创建对象,默认都是系统自带的对控制器对象,系统自带的是不能处理事件的,他不能写监听方法。需要我们手动去关联.
#####方式三
- 通过xib
1.加载指定名字的xib
XHViewController * vc = [[XHViewController alloc] initWithNibName:@"XHVC" bundle:nil];
2.加载和控制器名字相同的xib 优先级高于下面名字不带controller的.
- [[XHViewController alloc] init] 系统会帮我们加载和控制器同名的XIB
XHViewController * vc = [[XHViewController alloc] init];
3 . 加载和控制器名字相同,不带Controller 后缀 的xib
XHViewController * vc = [[XHViewController alloc] initWithNibName:@"XHView" bundle:nil];
#####注意
- 通过xib加载控制器,xib中添加的控件是view而不能是viewController.
- xib注意点: 1. xib里面必须有一个view描述控制器的view,因为控制器的view属性必须有值。2. xib需要指定描述哪一个控制器,描述UIView不需要,因为xib里面可以描述很多UIView,不能固定死,但是控制器就不一样了,一个xib就用来描述一个控制器。3.xib里面可能有很多view,需要拖线指明哪个是控制器的view
- xib和storyboard的区别storyboard已经指定了控制器的view,不需要我们管,xib需要我们手动管理。
我们需要在xib中关联 如图
![XIB.png](http://upload-images.jianshu.io/upload_images/3454340-7493869edf8c2bcb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)