iOS - UIWindow和view控制器的创建

iOS程序启动完毕后,创建的第一个试图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上

APPdelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // 窗口注意点:1.不要被销毁,需要弄一个强引用 2.必须窗口的尺寸
    // 1.新建窗口对象
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor yellowColor];
    // 2.创建窗口的根控制器,并且赋值
    UIViewController *rootVc = [[UIViewController alloc] init];
    rootVc.view.backgroundColor = [UIColor greenColor];
    self.window.rootViewController = rootVc;
    // 3.显示窗口
    [self.window makeKeyAndVisible];


    return YES;
}
键盘和状态栏都是窗口
UITextField *text = [[UITextField alloc] init];
[text becomeFirstResponder];
[self.window addSubview:text];
窗口层级
UIWindowLevelNormal
UIWindowLevelStatusBar
UIWindowLevelAlert

alert最大,层级可以加减


通过storyboard加载控制器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    // 1. 创建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    // 2.加载main.storyboard
    // name:storyboard名称不需要后缀
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    // 加载storyboard控制器
    // 默认加载箭头指向的控制器
    //UIViewController *vc = [storyboard instantiateInitialViewController];

    // 通过标识符加载控制器
    UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"blue"];
    // 设置窗口的根控制器
    self.window.rootViewController = vc;

    // 3.显示窗口
    [self.window makeKeyAndVisible];
    return YES;
}

通过xib创建控制器

这里写图片描述

这里写图片描述

// xib加载控制器步骤
// xib必须有view去描述控制器
// xib中哪个view描述控制器view,必须连线
// 让xib和控制器产生连线,告诉xib是用来描述控制器
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// 判断下有没有指定的nibname,如果有就回去加载
// 如果没有指定nibname,判断有没有指定和类同名的xib,就会去加载
// 如果没有指定nibname,没有和类同名的xib,会去加载没有Control后缀的xib
// 如果没有任何xib描述控制器的view,就不会加载xib
// 空的view就是透明的颜色
ViewController *vc = [[ViewController alloc] initWithNibName:@"vc" bundle:nil];      
self.window.rootViewController = vc;
[self.window makeKeyAndVisible];

loadview方法加载控制器

底层实现:判断下有没有指定的storyboard,如果有,就会创建storyboard描述的控制器的view,如果没有就会创建一个空的view

// 作用:加载控制器的view,调用时间:当控制器的view第一次使用的时候调用
// BGView是新创建的继承于UIView的对象
- (void)loadView
{
    BGView *view = [[BGView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = view;
    self.view.backgroundColor = [UIColor redColor];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值