iOS - 创建UIWindow
程序员文章站
2022-07-05 22:55:11
iOS程序启动完毕后,创建的第一个试图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上
APPdelegate.m
- (...
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]; }