iOS Developer

iOS控制器的多种创建方式

2016-11-20  本文已影响0人  戴上耳机__世界与我无关

方式一

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](https://img.haomeiwen.com/i3454340/7493869edf8c2bcb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
上一篇 下一篇

猜你喜欢

热点阅读