天天看点

iOS开发之UIWindow

1、概述

uiwindow是一种特殊的uiview,通常在一个app中只会有一个uiwindow。

ios程序启动完毕后,创建的第一个视图控件就是uiwindow,接着创建控制器的view,最后将控制器的view添加到uiwindow上,于是控制器的view就显示在屏幕上了。

一个ios程序之所以能显示到屏幕上,完全是因为它有uiwindow。也就说,没有uiwindow,就看不见任何ui界面。

iOS开发之UIWindow

2、添加uiview到uiwindow中两种常见方式

方式一:

- (void)addsubview:(uiview *)view;

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

例如:

mjoneviewcontroller *one = [[mjoneviewcontroller alloc] init];

[self.window addsubview:one.view];

方式二(开发中实际使用的方法,首选):

@property(nonatomic,retain) uiviewcontroller *rootviewcontroller;

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

self.window.rootviewcontroller = one;

常用方法:

- (void)makekeywindow;

让当前uiwindow变成keywindow(主窗口)。

- (void)makekeyandvisible;

让当前uiwindow变成keywindow,并显示出来。

3、获得uiwindow

[uiapplication sharedapplication].windows

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

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

[uiapplication sharedapplication].keywindow

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

view.window

获得某个uiview所在的uiwindow。

【备注】一个空项目中,appdelegate类遵守了uiapplicationdelegate协议,之后在相应事件发生时候uiapplication会通知它的delegate对象,比如,当应用启动完毕会uiapplication会通知appdelegate,之后会自动调用appdelegate中的didfinishlaunchingwithoptions,这时直接启动之时一个黑的界面,没有任何东西。要想显示东西,首先要用set方法往里面添加一个uiwindow:

self.window =

[[uiwindow alloc]initwithframe[uiscreen mainscreen].bounds];

添加过还不能显示,因为可能存在多个uiwindow,我们要调用get方法获取刚才设置的uiwindow把它设置为主窗口并且显示出来:

[self.window makekeyandvisible];

之后显示的就是这个uiwindow了,我们之后就可以往这个uiwindow中添加控制器(相当于android中的activity),添加时要添加为根控制器这个控制器才能显示出来:

self.window.rootviewcontroller =

myviewcontroller;

继续阅读