zoukankan      html  css  js  c++  java
  • iOS开发UI篇—控制器的View的创建

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

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

    #import "NJAppDelegate.h"
    #import "NJViewController.h"
    /*
     1.没有同名xib情况下
     2.通过 storyboard 创建
     3.有指定xib情况下创建
     4.有同名xib情况
     5.有同名去掉controll的情况
     6.loadveiw
     */
    @implementation NJAppDelegate
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // 创建UIWindow
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.backgroundColor = [UIColor whiteColor];
        
        /*
         // 1.第一种方式:没有xib和storyboard
         // (如果没有xib和storyboard, 会自动创建一个空白的view做为控制器的veiw)
         NJViewController *vc = [[NJViewController alloc] init];
         */
        
        /*
         //2.通过 storyboard 创建
         // 如果通过storyboard创建, 会创建箭头指向view做为控制器的veiw
         
         // 如果重写了控制器的loadview方法, 就不会创建storyboard中描述的view作为控制器的view, 而是创建一个空白的veiw做为控制器的veiw
         UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
         NJViewController *vc = [storyboard instantiateInitialViewController];
         */
        
        /*
         // 3.有指定xib情况下创建
         // 如果通过xib, 会创建xib中描述的veiw做为控制器的veiw
         NJViewController *vc = [[NJViewController alloc] initWithNibName:@"One" bundle:nil];
         */
        
        /*
         //  4.有同名xib情况
         // 如果有同名的xib, 会自动找到同名xib中描述的view做为控制器的veiw
         NJViewController *vc = [[NJViewController alloc] init];
         */
        
        /*
         // 5.有同名去掉Controller的 xib情况
         // 如果有有同名去掉Controller的xib, 会自动找到该xib的view做为控制器的view
         NJViewController *vc = [[NJViewController alloc] init];
         */
        
        // 6.重写控制器的loadveiw方法
        // 如果重写了控制器的loadview方法, 就不会去加载创建同名去掉controller的xib和同名的xib, 而是创建一个空白的veiw做为控制器的veiw
        NJViewController *vc = [[NJViewController alloc] init];
        
        // 设置控制器为window的根控制器
        self.window.rootViewController = vc;
        // 显示window
        [self.window makeKeyAndVisible];
        
        return YES;
    }

    六种方式:

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

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

    苹果官方文档示意图:

     

    三、控制器View的延迟加载

    说明:

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

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

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

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

    主控制器文件中:

    #import "NJViewController.h"
    
    @interface NJViewController ()
    
    @end
    
    @implementation NJViewController
    
    // 当控制器需要显示控制器的view的时候就会调用loadView
    // 可以在loadView方法中创建view给控制器
    // 该方法一般用于自定义控制器的view
    - (void)loadView
    {
        // 什么时候调用loadveiw就代表什么时候加载控制器的veiw
        NSLog(@"loadView");
        
        self.view = [[UIView alloc] init];
        self.view.backgroundColor = [UIColor greenColor];
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        NSLog(@"viewDidLoad");
    }
    @end
  • 相关阅读:
    jquery 学习(五)
    iOS: 学习笔记, Swift名字空间
    iOS: 学习笔记, Swift与C指针交互(译)
    iOS: 学习笔记, Swift运算符定义
    iOS: 学习笔记, Swift与Objective-C混用总结
    iOS: 学习笔记, Swift与Objective-C混用简明教程(转载)
    股票查询接口: 腾讯
    iOS: 学习笔记, swift扩展
    iOS:Swift界面实例1, 简单界面
    iOS: 学习笔记, 用代码驱动自动布局实例(swift)
  • 原文地址:https://www.cnblogs.com/yipingios/p/5553622.html
Copyright © 2011-2022 走看看