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

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值