五、主窗口和次窗口说明
代码:
// 程序启动完毕之后就会调用一次 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 1.创建UIWindow self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // 设置UIWindow的背景颜色 self.window.backgroundColor = [UIColor redColor]; // 让UIWindow显示出来(让窗口成为主窗口 并且显示出来) // 一个应用程序只能有一个主窗口 [self.window makeKeyAndVisible]; // 让UIWindow成为主窗口 // [self.window makeKeyWindow]; // 2. 再创建一个窗口 UIWindow *w2 = [[UIWindow alloc] initWithFrame:CGRectMake(100, 100, 200, 200)]; w2.backgroundColor = [UIColor yellowColor]; [w2 makeKeyAndVisible]; self.w2 = w2; // 3.创建两个文本输入框 // 3.1将文本输入框添加到window中 UITextField *tx1 = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 200, 40)]; tx1.borderStyle = UITextBorderStyleRoundedRect; [self.window addSubview:tx1]; // 3.2将文本输入框添加到w2中 UITextField *tx2 = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 100, 40)]; tx2.borderStyle = UITextBorderStyleRoundedRect; [self.w2 addSubview:tx2]; // 获取应用程序的主窗口 NSLog(@"%@", [UIApplication sharedApplication].keyWindow); return YES; } |
代码说明:
再创建一个窗口(主窗口和次窗口的区别)
局部变量,需要定义一个Window属性来保存变量。
window的属性定义为strong,就是为了让其不销毁。
一个应用程序只能有一个主窗口,程序中创建了两个Window,那么谁是主窗口?后面的窗口能覆盖前面的窗口。
提示:如果UItextfield不显示,可以考虑设置它的样式,因为其创建默认是虚线的,没有边框。
在ios7里边,主窗口和次窗口是没有区别的
在ios7以前中有区别:哪个是主窗口,后面设置为主窗口会把之前设置的覆盖掉。(只有主窗口才能响应键盘的输入事件,如果不能输入内容,可以查看是否是显示在主窗口上,不在主窗口上的不能响应。)
六、补充说明
在有storyboard中的创建过程:
先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,创建代理,并且把代理设置给application,根据项目配置文件info.plist里面的storyboard的name,找到对应的storyboard,接下来创建一个window,之后创建它的初始化控制器(就是箭头所指向的控制器),自动把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。
注意这个控制器属性面板上的“初始化控制器属性”。
在没有storyboard中的创建过程:
先执行Main函数,执行UIApplicationMain(),根据其第三个和第四个参数创建Application,创建代理,并且把代理设置给application,开启一个事件循环,当程序加载完毕,他会调用代理的didFinishLaunchingWithOptions:方法。在该方法中,会创建一个Window,然后创建一个控制器,并把该控制器设置为UIWindow的根控制器,接下来再将window显示出来,即看到了运行后显示的界面。