你的位置:首页 > 操作系统

[操作系统]iOS学习之控制器的创建


本次博客是一篇总结性质的博客,总结的是各种创建控制器的方式以及一些需要注意的操作。

1、通过storyboard创建控制器


  • 第三步:通过storyboard创建控制器

  ① 指定箭头指向的控制器为窗口的根控制器

  方法:

// 加载箭头指向的控制器- (nullable __kindof UIViewController *)instantiateInitialViewController;

  实例代码:

  // 通过storyboard创建控制器  // instantiateInitialViewController:加载箭头指向的控制器  UIViewController *vc = [storyboard instantiateInitialViewController];

   实例图:

  ② 通过 Storyboard ID 来创建根控制器

  方法:

// 参数为:Storyboard ID 的字符串- (__kindof UIViewController *)instantiateViewControllerWithIdentifier:(NSString *)identifier;

  实例代码:

// 通过 Storyboard ID 创建控制器UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"green"];

  正如 ① 中所示的图,我们将绿色背景的控制器的 Storyboard ID 置为 "green",但是Main.storyboard 的默认控制器仍然为粉色背景的控制器,使用上述实例代码,运行结果为如下图的一个绿色窗口

  具体如何设置视图控制器为 UIWindow 对象的根视图控制器以及将 UIWindow 对象作为主窗口并可见,请参考上一篇博客。

2、通过xib创建控制器

 通过 xib 创建控制器也是在 Main Interface 没有选定的时候,自己在 AppDelegate.m 文件中对应的方法中先初始化一个 UIWindow 对象。

 创建xib的方法:

  ① 在创建一个视图控制器的类的时候,将 Also create XIB file 选中之后,就会创建出来一个和控制器类对应的xib,如下图:

    这种方法创建的xib的名字与所对应的类名相同。

  ② 创建一个名字可以自定义的 xib

 

  通过xib创建根控制器的方法是一个控制器的初始化方法,实例代码:

  // 通过xib创建控制器  ViewController *vc = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

  加载xib的特殊写法:

  // 特殊写法1:  UIViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];  // 特殊写法2:  UIViewController *vc = [[ViewController alloc] init];

  以上 xib 的特殊写法加载 xib View 视图的底层实现:

   如果描述控制器 View 的 xib 跟控制器的类名相同,就会去加载

   只有控制器的 init 方法底层会调用 initWithNibName:bundle:

   只要通过 initWithNibName:bundle: 初始化控制器,并且 nibName 为 nil ,就会执行以下几步:

   (1)先寻找有没有跟控制器类名同名但是不带Controller的xib,如果有就会去加载(XMGView.xib)

   (2)如果没有就寻找有没有跟控制器类名同名的xib,如果有就会去加载(XMGViewController.xib)

   (3)如果都没有找到,创建空的view,