【原】iOS学习之控制器的建立

本次博客是一篇总结性质的博客,总结的是各类建立控制器的方式以及一些须要注意的操做。app

一、经过storyboard建立控制器

 正如我上一篇博客中所说,当 Main Interface 没有选定的时候,咱们通常只能经过代码来建立一个 UIWindow,再也不使用系统建立好的 Main.storyboard。ide

 经过 storyboard 建立控制器也是在 Main Interface 没有选定的时候,可是咱们还使用系统建立好的 Main.storyboard,经过不一样的方法来建立窗口的根控制器。spa

  • 第一步:在 AppDelegate.m 文件的 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中先初始化一个 UIWindow 对象,代码以下:
    // 建立窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  • 第二步:建立一个 UIStoryboard 对象并将其初始化为 Main.storyboard

  初始化方法:code

// 参数1:storyboard文件名,不须要带后缀
// 参数2:置为nil时表示[NSBundle mainBundle]
+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(nullable NSBundle *)storyboardBundleOrNil;

  实例代码:对象

    // 加载storyboard
    // storyboard文件名,不须要带后缀,初始化为 Main.storyboard,name就是Main
    // nil:  [NSBundle mainBundle]
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
  • 第三步:经过storyboard建立控制器

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

  方法:字符串

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

  实例代码:博客

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

   实例图:it

  如上图:咱们将粉色背景的控制器设置为默认 Main.storyboard 的控制器,当咱们使用上述代码时,程序运行的效果是:以下图的一个粉色窗口io

  ② 经过 Storyboard ID 来建立根控制器

  方法:

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

  实例代码:

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

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

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

二、经过xib建立控制器

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

 建立xib的方法:

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

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

  ② 建立一个名字能够自定义的 xib

  建立后的设置:(具体以下图)

   (1)选择文件全部者选项

   (2)绑定控制器

   (3)绑定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,

相关文章
相关标签/搜索