创建控制器、视图的几种方式

创建控制器

  • 通过代码的方式加载viewController
    CYViewController *controller = [[CYViewController alloc] init];
    self.window.rootViewController = controller;
    [self.window makeKeyAndVisible];
    
  • 通过storyboard加载viewController
    1. 箭头指向的viewController(RootViewController)
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; //加载箭头指向的viewController
    CYViewController *controller = [storyboard instantiateInitialViewController];
    
    2 加载storyboard中特定标示的viewController
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    CYViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"two"];
    
  • 通过xib加载viewController
    创建Xib,并指定xib的files owner为自定义控制器类(为了能连线关联管理IB的内容)
    xib中要有内容,且xib中描述的控制器类的view属性要与xib的view控件完成关联(关联方法两种,一种是control+files owner拖线到xib中搭建的指定view控件,另一种是指定xib中的view拖线到@interface)
    1. 从xib中加载viewController
      CYViewController *controller = [[CYViewController alloc]   initWithNibName:@"CYOneView" bundle:nil];
    
  1. bundle中取出xib内容

     CYViewController *vc = [[NSBundle mainBundle] loadNibNamed:@"Two" owner:nil options:nil].lastObject;
    

创建视图

  • 用系统的loadView方法创建控制器的视图.loadView方法是自动调用的,其原理如下:
    1.先判断当前控制器是不是从storyBoard当中加载的,如果是从storyBoard加载的控制器.那么它就会从storyBoard当中加载的控制器的View,设置当前控制器的view.
    2.当前控制器是不是从xib当中加载的,如果是从xib当中加载的话,把xib当中指定的View,设置为当前控制器的View.
    3.如果也不是从xib加载的,它会创建空白的view.
  1. 一旦重写,就说明要自定义view
  • 如果有xib文件名和控制器的类名前缀(也就是去掉controller)的名字一样的 xib文件 就会用这个xib文件来创建控件器的视图 例:控件器的名为 MJViewController xib文件名为 MJView.xib 如果xib文件名后有一个字不一样就不会去根据它去创建如:MJView8.xib
    找和控制器同名的xib文件去创建

你可能感兴趣的:(创建控制器、视图的几种方式)