UIWindow小常识

摘要:
UIWindow是一种特殊的UIView。通常,应用程序中只启动一个UIWindowiOS程序,创建的第一个视图控件是UIWindow。然后,创建控制器的视图。最后,控制器的视图被添加到UIWindow中。然后控制器的视图显示在屏幕上。iOS程序可以显示在屏幕上的原因是它有一个UIWindow,也就是说,没有UIWindow,你看不到任何UI界面。通常在程序启动后创建
•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小常识》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SAS | 使用SAS数据最新的一些在c或winapi下做界面的库下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

无法为数据库中的对象分配空间,因为'PRIMARY'文件组已满

使用SQLServer2012保存数据时出错。错误消息:无法为数据库“***”中的对象“***”分配空间,因为“PRIMARY”文件组已满。请通过删除不必要的文件、删除文件组中的对象、将其他文件添加到文件组或启用文件组中现有文件的自动增长来增加可用磁盘空间。...

linux 安装nginx

1.检查服务器上是否安装了nginx:nginx v2。查看编译参数:nginxv3。查看安装目录:rpm-qlnginx4。查看配置文件:/etc/logrotate D/nginx5。在安装nginx之前,请确保系统中安装了gcc、pcre-devel、zlib-devel和openssl-devel。5.1如果安装了rpm软件包,您可以使用rpm qa...

C#Win32API编程之PostMessage

本文以C#调用Win32API函数PostMessage完成指定表单的后台鼠标和键盘模拟为例,大致解释了C#调用非托管代码和Window的消息处理机制。我们可以将PostMessage用于函数。成功与否在很大程度上取决于我们传达的信息是否真实。消息表明消息是什么。请原谅我先讲故事。我希望先解释一下PostMessage函数。这是一个异步操作,如下图所示:调用...

汇编指令MOV

格式:MOVDST,SRC例如:MOVEAX,#050aH;将十六进制050a传送到通用寄存器eax中MOVDI,BXMOVES,AXMOVAX,DSMOVAL,23HMOV[2000H],02HMOV[2061H],BX...

GitLab的基础使用-创建用户(users)

否则,将追究法律责任。1、 以管理员身份登录GitLab的WebUI,并创建用户1˃使用管理员登录GitLab。管理员登录成功后,点击下图所示的小扳手,然后点击进入管理员的Dashboard界面。如果时间间隔过长,可以要求运维人员重置密码。操作和维护人员可以参考第一步来重置用户的密码。实际上,您也可以通过参考第三步中的方法找到自己的密码,而不必麻烦操作和维护...

uni.showModal,uni.showToast使用

uni.showModal({title:'提示',content:'您已参加并通过本次考试,是否再次进行考试?...