首页 > 代码库 > iOS开发UI篇—控制器的View的创建

iOS开发UI篇—控制器的View的创建

iOS开发UI篇—控制器的View的创建

一、6种创建控制器View的方式

 1 #import "NJAppDelegate.h" 2 #import "NJViewController.h" 3 /* 4  1.没有同名xib情况下 5  2.通过 storyboard 创建 6  3.有指定xib情况下创建 7  4.有同名xib情况 8  5.有同名去掉controll的情况 9  6.loadveiw10  */11 @implementation NJAppDelegate12 13 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions14 {15     // 创建UIWindow16     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];17     self.window.backgroundColor = [UIColor whiteColor];18     19     /*20      // 1.第一种方式:没有xib和storyboard21      // (如果没有xib和storyboard, 会自动创建一个空白的view做为控制器的veiw)22      NJViewController *vc = [[NJViewController alloc] init];23      */24     25     /*26      //2.通过 storyboard 创建27      // 如果通过storyboard创建, 会创建箭头指向view做为控制器的veiw28      29      // 如果重写了控制器的loadview方法, 就不会创建storyboard中描述的view作为控制器的view, 而是创建一个空白的veiw做为控制器的veiw30      UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];31      NJViewController *vc = [storyboard instantiateInitialViewController];32      */33     34     /*35      // 3.有指定xib情况下创建36      // 如果通过xib, 会创建xib中描述的veiw做为控制器的veiw37      NJViewController *vc = [[NJViewController alloc] initWithNibName:@"One" bundle:nil];38      */39     40     /*41      //  4.有同名xib情况42      // 如果有同名的xib, 会自动找到同名xib中描述的view做为控制器的veiw43      NJViewController *vc = [[NJViewController alloc] init];44      */45     46     /*47      // 5.有同名去掉Controller的 xib情况48      // 如果有有同名去掉Controller的xib, 会自动找到该xib的view做为控制器的view49      NJViewController *vc = [[NJViewController alloc] init];50      */51     52     // 6.重写控制器的loadveiw方法53     // 如果重写了控制器的loadview方法, 就不会去加载创建同名去掉controller的xib和同名的xib, 而是创建一个空白的veiw做为控制器的veiw54     NJViewController *vc = [[NJViewController alloc] init];55     56     // 设置控制器为window的根控制器57     self.window.rootViewController = vc;58     // 显示window59     [self.window makeKeyAndVisible];60     61     return YES;62 }

六种方式:

1.没有同名xib情况下
2.通过 storyboard 创建
3.有指定xib情况下创建
4.有同名xib情况
5.有同名去掉controll的情况
6.loadveiw

二、创建控制器View的优先级

苹果官方文档示意图:

三、控制器View的延迟加载

说明:

控制器的view是延迟加载的:用到时再加载

可以用isViewLoaded方法判断一个UIViewController的view是否已经被加载

控制器的view加载完毕就会调用viewDidLoad方法

 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 2 { 3     // 1.创建UIWindow 4     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 5     self.window.backgroundColor = [UIColor whiteColor]; 6      7      8     // 2.创建控制器 9      NJViewController *vc = [[NJViewController alloc] init];10     11     // 其实是两步操作, 首先调用loadview方法, 创建控制器的veiw,然后再设置控制器的view的颜色为紫色, 也就是说后一次的颜色覆盖掉了前一次的颜色12     vc.view.backgroundColor = [UIColor purpleColor];13     14     // 3.设置控制器为window的根控制器15     self.window.rootViewController = vc;16     17     // 4.显示window(在这一行才用到了控制器的veiw)18     [self.window makeKeyAndVisible];19     20     return YES;21 }

主控制器文件中:

 1 #import "NJViewController.h" 2  3 @interface NJViewController () 4  5 @end 6  7 @implementation NJViewController 8  9 // 当控制器需要显示控制器的view的时候就会调用loadView10 // 可以在loadView方法中创建view给控制器11 // 该方法一般用于自定义控制器的view12 - (void)loadView13 {14     // 什么时候调用loadveiw就代表什么时候加载控制器的veiw15     NSLog(@"loadView");16     17     self.view = [[UIView alloc] init];18     self.view.backgroundColor = [UIColor greenColor];19 }20 21 - (void)viewDidLoad22 {23     [super viewDidLoad];24     NSLog(@"viewDidLoad");25 }26 @end

 

iOS开发UI篇—控制器的View的创建