IOS开发概述-09.UIController和控制器的View

来源:互联网 发布:阿里云域名修改 编辑:程序博客网 时间:2024/05/21 07:59

1.通过storyboard加载控制器

  • 需要先设置项目配置文件中不指定storyboard
// 加载完info.plist完毕后调用,若是指定了SB,就去加载SB,若没有指定则执行以下方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // 1.创建UIWindow    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];    // 2.创建根控制器(手动加载SB)    // UIStoryboard:用来加载SB文件    // 类方法storyboardWithName:bundle:用来加载指定名称的SB,不需要后缀名    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];    // 2.1创建SB描述的控制器    // 方法一:instantiateInitialViewController根据初始化控制器创建SB描述的控制器,即SB中箭头所指的控制器//    ViewController *vc = [sb instantiateInitialViewController];    // 方法二:根据控制器的SB ID创建制定的控制器(需在SB中指定控制器的Storyboard ID)    ViewController *vc = [sb instantiateViewControllerWithIdentifier:@"org"];    // 2.2设置window的根控制器    self.window.rootViewController = vc;    // 3.显示窗口    [self.window makeKeyAndVisible];    return YES;}

这里写图片描述


2.通过Xib加载控制器

  • 需要先设置项目配置文件中不指定storyboard
// 程序启动完毕后调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // 1.创建UIWindow    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];    // 2.创建根控制器(通过Xib创建)    // 2.1指定Xib名称创建控制器//    ViewController *vc = [[ViewController alloc] initWithNibName:@"ZJTestOne" bundle:nil];    // 2.2不指定xib名称创建控制器    ZJTestViewController *vc = [[ZJTestViewController alloc] init];    // 1.判断下nibName有没有值,如果有值,就会去加载nibName指定的xib    // 2.如果nibName为空,会先去查找有没有ZJTestView.xib,如果有就去加载    // 3.如果没有ZJTestView.xib.xib,就会去加载根类名同名的xib:ZJTestViewController.xib    // 4.如果还没有找到,就生成一个空的view    self.window.rootViewController = vc;    // 3.显示窗口    [self.window makeKeyAndVisible];    return YES;}

这里写图片描述


3.控制器View的创建

  • 控制器的View是懒加载的,只有在需要使用的时候才会创建(即只有在调用了View的getter方法时才会创建view)
  • view的创建原理:
-(UIView * __nonnull)view{    if (_view == nil) {        // 记载控制器的View        [self loadView];        // 控制器的View记载完毕        [self viewDidLoad];    }    return _view;}
  • loadView方法

    • 什么时候调用:当第一次使用控制器的view的时候就会调用
    • 作用:加载控制器的View,自定义控制器的View
  • 当指定了从storyboard和Xib加载控制器时,默认实现如下方法

-(void)loadView{    [super loadView];}
  • 一旦在控制器中重写了loadView方法,将不会加载storyboard和Xib的View,会根据loadView中的代码自定义View
// 自定义控制器的View-(void)loadView{    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds];    self.view.backgroundColor = [UIColor grayColor];    [self.view addSubview:[UIButton buttonWithType:UIButtonTypeContactAdd]];}

4.控制器的view的默认背景色

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // 1.创建UIWindow    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];    // 设置背景颜色    self.window.backgroundColor = [UIColor yellowColor];    // 添加按钮控件    UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];    btn.frame = CGRectMake(200, 200, btn.frame.size.width, btn.frame.size.height);    [self.window addSubview:btn];    // 2.创建根控制器    UIViewController *vc = [[UIViewController alloc] init];    // 设置view的透明度为0,即完全透明时可以穿透View点击到btn(alpha<=0.01,代表控件完全透明)//    vc.view.alpha = 0;    // 若不设置透明度,我们点击不了按钮,证明View不是透明的,若是设置透明度接近完全透明可以实现和不设置透明度一样的效果,可以证明view的默认是接近完全透明的颜色,系统默认为[UIColor clearColor]//    vc.view.alpha = 0.02;//等同于下面的颜色设置    vc.view.backgroundColor = [UIColor clearColor];    self.window.rootViewController = vc;    // 3.设置window可见    [self.window makeKeyAndVisible];    return YES;}
0 0
原创粉丝点击