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

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


  • 纯代码创建

即:alloc+init方式,如:

AMViewController * vc = [[AMViewController alloc] init];


  • 从storyboard中加载

 a. 创建UIStoryboard对象

+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle*)storyboardBundleOrNil

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

    storyboardBundleOrNil参数:传nil即可

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

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

如:

UIStoryboard * stoyrboard = [UIStoryboard storyboardWithName:@"main" bundle:nil];
//AMViewController *vc = [stoyrboard instantiateInitialViewController];
AMViewController *vc = [stoyrboard instantiateViewControllerWithIdentifier:@"redViewController"];


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

    UIKit框架(5)控制器的创建_第1张图片


  • 从xib中加载

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

方法一:

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

     

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

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

- (NSArray *)loadNibNamed:(NSString *)name owner:(id)owner options:(NSDictionary *)options

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

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

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


如:

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


方法二:

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

     wKiom1bTqpHSqwInAAAwul7-ldg677.png      UIKit框架(5)控制器的创建_第2张图片

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

     

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

- (instancetype)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle

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

     nibBundle参数:传nil即可

如:

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