码迷,mamicode.com
首页 > Windows程序 > 详细

UIWindow小常识

时间:2015-04-10 23:49:02      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

•UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow
•iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了
•一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow
•也就说,没有UIWindow,就看不见任何UI界面
 
一般在程序启动完毕时创建和设置Window
所以在这个UIApplication代理方法中创建Window

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

 

 

•添加UIView到UIWindow中两种常见方式:

 

1.- (void)addSubview:(UIView *)view;

// 不推荐原因:创建的控制器为局部变量,出了

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

 方法将会销毁,这是很严重的事情,View还在控制器销毁了,容易形成野指针错误

直接将view添加到UIWindow中,但并不会理会view对应的UIViewController

 

 

 

 

2.@property(nonatomic,retain) UIViewController *rootViewController;
 
// 推荐原因:rootViewController属性是强指针,不会销毁,只要rootViewController还在控制器就在,控制器在View就在

 

自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的生命周期

 

 

 

•常用方法

 

- (void)makeKeyWindow;

 

让当前UIWindow变成keyWindow(主窗口)

 

 

 

- (void)makeKeyAndVisible;

 

让当前UIWindow变成keyWindow,并显示出来

 

 

#import "LMPAppDelegate.h"
#import "LMPViewController.h"

@implementation LMPAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 创建 Window
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // 设置Window颜色
    // 建议:最好不要设置Window颜色,因为View假如没有设置颜色容易被设置颜色的Window盖住,View里设置颜色即可
//    self.window.backgroundColor = [UIColor blueColor];
    // 创建控制器
    LMPViewController *oneView = [[LMPViewController alloc] init];
    
    // 将控制器的View添加到Window中
//    [self.window addSubview:oneView.view];
    
    // 强烈推荐使用这种方法
    // 设置Window的根控制器
    self.window.rootViewController = oneView;
    
    // 显示Window
    [self.window makeKeyAndVisible];
    return YES;
}

 

UIWindow的获得:

[UIApplication sharedApplication].windows

在本应用中打开的UIWindow列表,这样就可以接触应用中的任何一个UIView对象

(平时输入文字弹出的键盘,就处在一个新的UIWindow中)

 

[UIApplication sharedApplication].keyWindow

用来接收键盘以及非触摸类的消息事件的UIWindow,而且程序中每个时刻只能有一个UIWindow是keyWindow。如果某个UIWindow内部的文本框不能输入文字,可能是因为这个UIWindow不是keyWindow

 

view.window

获得某个UIView所在的UIWindow

 

UIWindow小常识

标签:

原文地址:http://www.cnblogs.com/pocket-mood/p/4415853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!