UIWindow是本质也是一个UIView,但是 TA 比较的特殊,因为在一个app中永远都只会出现一个UIWindow,而且你在创建项目的时候,无论是空模板还是其他的,Xcode肯定会帮你创建好一个UIWindow。有了UIWindow,再把创建好的UIView添加到UIWindow上,这样运行后就能看到view在屏幕上显示了。
一个iOS的小程序之所以能在屏幕上显示,完全是因为它有UIWindow。如果没有UIWindow,那么你做的再好看,运行起来都是看不到任何东西的,就黑黑的一片。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 创建一个窗口对象,并且和屏幕大小一样 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 设置窗口的背景色为白色 self.window.backgroundColor = [UIColor colorWithRed:arc4random() % 256 / 255.0 green:arc4random() % 256 / 255.0 blue:arc4random() % 256 / 255.0 alpha:1.0]; // 初始化与窗口等大的视图 // 讲window比作画板的话,次试图就是画板上的画纸 // 创建一个UIView对象的过程 // 1、初始化,并且指定大小 UIView containerView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 2、设置背景颜色 // 视图如果不给定背景色,默认是透明色 containerView.backgroundColor = [UIColor whiteColor]; // 添加显示,讲视图View添加到window上面进行显示 [self.window addSubview:containerView]; // 让窗口成为应用程序的主窗口(唯一窗口),并且可见 [self.window makeKeyAndVisible]; return YES;}
上面的代码是利用空模板创建的,就只有AppDelegate,连ViewController都没有,新版本的Xcode不自带空模板,需要的朋友可以去github上面下载空模板,然后放到Xcode里面去。
把view添加到UIWindow上面的方法有两种,第一种就是上面那种,[self.window addSubview:containerView],还一种是 self.window.rootViewController = containerView,两种方法都可以使用,建议使用第二种,因为第一种存在一些问题,比如说控制器上面可能由按钮,需要监听按钮的点击事件,如果是1,那么按钮的事件应该由控制器来进行管理。但控制器是一个局部变量,控制器此时已经不存在了,但是控制器的view还在,此时有可能会报错。注意:方法执行完,这个控制器就已经不存在了。不通过控制器的view也可以做开发,但是在实际开发中,不要这么做,不要直接把view添加到UIWindow上面去。因为,难以管理。