UIViewController * vc=[[UIViewController alloc]init];
//注意:这里仅仅是加载名称叫做Test的storyboard, 并不会创建storyboard中的控制器以及控件 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil]; //创建storyboard中箭头指向的控制器 UIViewController *vc = [storyboard instantiateInitialViewController]; //注意:如果在一个storyboard中有多个控制器,如何指定创建哪个特定的控制器呢?我们可以根据storyBoard中的Identifier去加载创建控制器 UIViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"two"];
Xib是storyboard的前身,使用storyboard的好处是可以建立起界面跳转的关系,看起来更加直观。
UIViewController *vc = [[UIViewController alloc] initWithNibName:@"One" bundle:nil];
可能报错的地方:
产生原因:在xib文件中没有进行任何操作。
解决方法:往xib中拖一个view
设置File‘s Owner,可以理解为设置这个文件归谁所有,对File‘s Owner和view进行连线。
loadView
方法其实直接看下面这张图我们就非常清楚了
当view需要被展示而它却是nil时,viewController会调用loadView
方法去创建View;loadView
内部做了怎样的操作?
默认实现即[super loadView]里面做了什么事情。
[[UIViewController alloc] initWithNibName:@"testController" bundle:nil];
[[UIViewController alloc] init]; // 加载UIViewController.xib
self.view = [UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
如果想通过代码来创建UIViewController
的view
,就要重写loadView
方法,并且不需要调用[super loadView]
,因为在上面已经提到:若没有xib文件,[super loadView]
默认会创建一个空白的UIView
。我们既然要通过代码来自定义UIView
,那么就没必要事先创建一个空白的UIView
,以节省不必要的开销。
注意:loadView
只调用一次,即第1次打开程序的时候发现没有view,则先去找loadView,如果有的话就创建view,如果没有另找他法。加载过之后,第2次就不会再调用loadView
了。所以,如下代码是一个死循环,因为它一直在找view。
-(void)loadView{ self.view.backgroundColor=[UIColor greenColor]; }
原文:https://www.cnblogs.com/xuan52rock/p/15016166.html