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