创建控制器的方式:
<方式1>直接创建:
XZOneViewController *one = [[XZOneViewController alloc] init];
one.view.backgroundColor = [UIColor redColor];
self.window.rootViewController = one;
<方式2>通过storyboard创建:
1. 主动加载storyboard (从现成的storyboard里面加载已经描述好了的东西)
// 1.0 先创建一个storyboard文件 Two.storyboard,但是在Main Interface中不设置成启动加载main storyboard(去掉main)。
// 1.1 加载storyboard文件,并没有创建storyboard里面的控制器。
// 传nil代表mainBundle,操作storyboard对象意味着操作Two.storyboard文件。
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Two" bundle:nil];
// 1.2 创建storyboard里面的控制器
// 1.2 情况一:
// UIViewController *vc = [storyboard instantiateInitialViewController]; // 返回的是箭头所指的控制器
// 1.2 情况二:
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"pink"]; // 此控制器是没有箭头指向的控制器,identifier是pink
self.window.rootViewController = vc;
// 示意图1:
2. 设置为storyboard为整个程序最主要storyboard,程序已启动就会去加载Main.storyboard:
自动生成加载storyboard代码为:
// 1.创建window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 2.加载storyboard,并且创建初始化控制器(箭头所指的控制器)
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
self.window.rootViewController = [storyboard instantiateInitialViewController];
// 3.显示窗口
[self.window makeKeyAndVisible];
加载主要storyboard会完成三件事情:
1> 创建窗口
2> 创建箭头所指的 Initial View Controller。
3> 并设置控制器为窗口的根控制器。控制器的view就显示在window上面了。
总结:1. 没有主动去加载storyboard,storyboard不会凭空冒出来;
2. 只要设置了主窗口,会自动生成加载storyboard代码。
<方式3>指定xib文件来创建:
XZViewController *viewVc = [[XZViewController alloc] initWithNibName:@"xzVc" bundle:nil]; // 这之前已经创建了一个xzVc.xib文件,记得把xib的view拖给相应的控制器(file‘owner)。
=======附加=========================
如何创建一个控制器?
控制器常见的创建方式有以下几种:
1. 通过storyboard创建;
2. 直接创建:
XZViewController *xzVc = [[XZViewController alloc] init];
3.指定xib文件来创建:
XZViewController *xzVc = [[XZViewController alloc] initWithNibName:@"XZViewController" bundle:nil];
通过storyboard创建控制器:
1. 先加载storyboard文件 (Test是storyboard的文件名)
UIStoryboard *storyboard = [[UIStoryboard storyboardWithName:@"Test" bundle:nil];
2. 接着初始化storyboard中的控制器
1> 初始化"初始化控制器" (箭头所指向的控制器)
XZViewController *xzVc = [storyboard instantiateInitialViewController];
2> 通过一个标识初始化对应的控制器:
XZViewController *xzVc = [storyboard instantiateInitialViewControllerWithIdentifier:@"xz"];