UIWindow 的目的是啥?

Posted

技术标签:

【中文标题】UIWindow 的目的是啥?【英文标题】:What is the purpose of UIWindow?UIWindow 的目的是什么? 【发布时间】:2013-08-16 21:22:14 【问题描述】:

我总是看到对应用程序“窗口”的引用,我看到 AppDelegates 通常有一个名为“窗口”的UIWindow 属性。所以我只是想知道如何感知这个UIWindow 对象。我看到它是UIView 的子类,所以我想从技术上讲它是一个视图,对吧?那么可以说它就像整个应用程序的 Superview 吗?另外,我什么时候以及为什么会提到它?它增加了什么价值?

我知道里面有很多问题,但只要在 UIWindow 上提供一些整体背景信息就好了。

【问题讨论】:

我认为它 1. 仅仅是 AppKit 的继承,2. 支持内部实现细节(例如,UIAlertView 有自己的窗口,以便能够完全捕获触摸事件。) 查看 Apple 的 The Role of Window in an ios App。 【参考方案1】:

您可能需要查看 iOS 视图编程指南中的 About Windows and Views 部分。

在 iOS 中,您使用窗口和视图在屏幕上呈现应用程序的内容。 Windows 本身没有任何可见内容,但为应用程序的视图提供了一个基本容器。视图定义了您想要填充某些内容的窗口的一部分。例如,您可能有显示图像、文本、形状或它们的某种组合的视图。您还可以使用视图来组织和管理其他视图。

另外请注意,iOS 应用程序通常只有一个窗口。如果应用在外部屏幕上显示内容,则例外情况。

【讨论】:

有点晚了,但你最后的话其实很不真实。一个应用程序通常有许多窗口,即键盘、警报视图、操作表、UIReferenceLibraryViewController(选择“定义”时的字典视图控制器)、全屏视频播放器等。 @LeoNatan 不太正确。引用 Apple 文档:“应用程序不会通过显示新窗口来更改其内容。要更改显示的内容,您可以更改窗口的最前面的视图。大多数 iOS 应用程序在其生命周期内只创建和使用一个窗口。这个窗口跨越设备的整个主屏幕,并在应用程序生命周期的早期从应用程序的主 nib 文件加载(或以编程方式创建)。但是,如果应用程序支持使用外部显示器,它可以创建一个额外的窗口来显示该外部显示器上的内容。”【参考方案2】:

UIWindow 一个或多个视图在屏幕上的呈现由 UIWindow 对象协调。在 iOS 应用程序中通常只有一个窗口。同时查看多个。 Windows 和 Views 都用于在屏幕上显示应用程序的内容。 Windows 为应用程序的视图提供了一个基本容器,但没有任何可见内容。视图是窗口的一部分,您可以在其中填充一些内容。例如,您可能有显示图像、文本的视图。

ProblemStucks

【讨论】:

【参考方案3】:

Window 就像任何 iOS 应用程序的最顶层 UI 容器。它位于所有视图和视图控制器之上。

问我为什么需要它,我说它使 UI 结构在视图层次结构和事件处理方面更加清晰。例如,任何用户事件,当不被最内层视图处理时,如果层次结构中没有其他视图处理它,最终会在视图层次结构中上升到窗口对象。

另一个例子是处理应用程序特定视图细节的窗口的 rootViewController。

应用程序通常只有一个窗口。但是我开发了一个使用共享框架进行用户身份验证的应用程序。在那里,我们有一个特定于该身份验证框架的单独窗口。你问为什么要分开窗口,我又来了,有两个重要的用例,

    正如我所提到的,它是一个共享的身份验证框架。因此,不同的应用可以使用相同的框架进行用户身份验证,该框架使用自己的登录屏幕窗口等。 会话超时后,无论用户当前在屏幕上做什么,都必须弹出登录屏幕。如果我们不使用单独的窗口,这会变得非常棘手。

希望你在阅读完这些例子后能够理解窗口的本质。

【讨论】:

以上是关于UIWindow 的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

UIWindow 详解及使用场景

iOS小技能:特殊的UIView(UIWindow)

86UIWindow简单介绍

iOS:为啥 UIWindow 不显示?

walker代理深入浅出——程序的启动原理(下)(探究 UIWindow)

在主窗口上创建一个新的 UIWindow