当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS - 创建UIWindow

iOS - 创建UIWindow

2018年02月27日  | 移动技术网移动技术  | 我要评论

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];
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];
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网