ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【转】Controller以及View的几种创建方式

2021-07-15 16:36:17  阅读:180  来源: 互联网

标签:xib storyboard 创建 几种 Controller loadView View UIViewController view


Controller的三种创建方式

方式一:直接alloc和init创建控制器
UIViewController * vc=[[UIViewController alloc]init];

 

方式二:通过storyboard创建
//注意:这里仅仅是加载名称叫做Test的storyboard, 并不会创建storyboard中的控制器以及控件
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
   
//创建storyboard中箭头指向的控制器
UIViewController *vc = [storyboard instantiateInitialViewController];
    
//注意:如果在一个storyboard中有多个控制器,如何指定创建哪个特定的控制器呢?我们可以根据storyBoard中的Identifier去加载创建控制器
UIViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"two"];

 

方式三:通过NIB创建

Xib是storyboard的前身,使用storyboard的好处是可以建立起界面跳转的关系,看起来更加直观。

UIViewController *vc = [[UIViewController alloc] initWithNibName:@"One" bundle:nil]; 

 

可能报错的地方:

was unable to load a nib named "One"' 不能加载

产生原因:在xib文件中没有进行任何操作。
解决方法:往xib中拖一个view

loaded the "One" nib but the view outlet was not set.'

设置File‘s Owner,可以理解为设置这个文件归谁所有,对File‘s Owner和view进行连线。

View的创建方式:通过loadView方法

其实直接看下面这张图我们就非常清楚了

 


当view需要被展示而它却是nil时,viewController会调用loadView方法去创建View;
loadView内部做了怎样的操作?
默认实现即[super loadView]里面做了什么事情。

 

  1. 它会先去查找与UIViewController相关联的xib文件,通过加载xib文件来创建UIViewController的view
  • 如果在初始化UIViewController指定了xib文件名,就会根据传入的xib文件名加载对应的xib文件
  • [[UIViewController alloc] initWithNibName:@"testController" bundle:nil]; 

     

  • 如果没有明显地传xib文件名,就会加载跟UIViewController同名的xib文件
  • [[UIViewController alloc] init]; // 加载UIViewController.xib 

     

  1. 如果没有找到相关联的xib文件,就会创建一个空白的UIView,然后赋值给UIViewController的view属性,大致如下
self.view = [UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

 

如果想通过代码来创建UIViewControllerview,就要重写loadView方法,并且不需要调用[super loadView],因为在上面已经提到:若没有xib文件,[super loadView]默认会创建一个空白的UIView。我们既然要通过代码来自定义UIView,那么就没必要事先创建一个空白的UIView,以节省不必要的开销。

注意:loadView只调用一次,即第1次打开程序的时候发现没有view,则先去找loadView,如果有的话就创建view,如果没有另找他法。加载过之后,第2次就不会再调用loadView了。所以,如下代码是一个死循环,因为它一直在找view。

-(void)loadView{
    self.view.backgroundColor=[UIColor greenColor];
}

 

  5人点赞   OC笔记 from:https://www.jianshu.com/p/f33935584e11

标签:xib,storyboard,创建,几种,Controller,loadView,View,UIViewController,view
来源: https://www.cnblogs.com/xuan52rock/p/15016166.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有