在UIKit中,UIViewController及其子类描述视图控制器,即一个页面

本篇文章介绍一下控制器的三种主要创建方式


纯代码创建

即:alloc+init方式,如:

AMViewController*vc=[[AMViewControlleralloc]init];


从storyboard中加载

a.创建UIStoryboard对象

+(UIStoryboard*)storyboardWithName:(NSString*)namebundle:(NSBundle*)storyboardBundleOrNil

name参数:storyboard文件名,不包含扩展名

storyboardBundleOrNil参数:传nil即可

b. 从UIStoryboard对象中获取控制器对象

-(id)instantiateInitialViewController//取出唯一的初始控制器-(id)instantiateViewControllerWithIdentifier:(NSString*)identifier//按照ID

如:

UIStoryboard*stoyrboard=[UIStoryboardstoryboardWithName:@"main"bundle:nil];//AMViewController*vc=[stoyrboardinstantiateInitialViewController];AMViewController*vc=[stoyrboardinstantiateViewControllerWithIdentifier:@"redViewController"];


控制器的ID:在storyboard文件中可以设计多个控制器,每个控制器可以管理一个ID


从xib中加载

xib设计控制器的view,有以下两种方式:

方法一:

可以在xib中放置控制器,如:

代码中仍然使用NSBundle的loadNibNamed:从Nib中创建

设计的控制器,同样可以设置关联的子类类型

-(NSArray*)loadNibNamed:(NSString*)nameowner:(id)owneroptions:(NSDictionary*)options

name参数:传递xib文件的文件名(不带后缀名)

其余参数传nil使用默认值即可

返回值:为该xib文件中所有对象的数组,一般一个xib文件只设计一个对象


如:

AMViewController*vc=[[[NSBundlemainBundle]loadNibNamed:@"xxx"]lastObject];


方法二:

在xib中仍然放置一个view,选则xib中的File’s owner ,设置class为控制器子类

右键File’s owner,view属性连线到xib中的view对象

代码中使用UIViewController的一下init方法从xib中创建其view

-(instancetype)initWithNibName:(NSString*)nibNamebundle:(NSBundle*)nibBundle

nibName参数:xib文件名,不包括后缀名

nibBundle参数:传nil即可

如:

AMViewController*vc=[[AMViewControlleralloc]initWithNibName:@"view"bundle:nil];