iOS 应用程序是不是有可能拥有多个窗口?

Posted

技术标签:

【中文标题】iOS 应用程序是不是有可能拥有多个窗口?【英文标题】:Is it possible that an iOS application can have more than one window?iOS 应用程序是否有可能拥有多个窗口? 【发布时间】:2017-10-27 12:35:37 【问题描述】:

我在面试中被问过很多次这个问题,搜索了每个地方都没有得到任何正确的答案。所以最后在这里发布这个问题。

【问题讨论】:

看看这个! developer.apple.com/documentation/uikit/uiwindow 是的,它可以有多个窗口;但一个只能同时是 key。您对使用多个窗口有什么计划? 【参考方案1】:

你可以通过这个。

是的,您可以有多个窗口。关键窗口是接收用户输入的窗口。

从 Rob 的回答开始,我玩了一会儿,想为其他试图获取有关此主题的信息的人写一些笔记:

    添加另一个 UIWindow 完全没有问题。只需创建一个 和 makeKeyAndVisible。完毕。 通过创建另一个窗口将其删除 可见,然后释放你不再需要的那个。 “key”窗口接收所有键盘输入。 UIWindow 涵盖了所有内容,甚至包括模态框、弹出框等。太棒了! UIWindow 总是隐式的纵向显示。它不旋转。 您必须将控制器添加到新窗口的根控制器并让它处理旋转。 (就像主窗口一样)窗口的级别决定 它显示得有多“高”。将其设置为 UIWindowLevelStatusBar 以使其涵盖所有内容。 将其隐藏属性设置为 NO。第二个 UIWindow 可用于在屏幕上显示浮动在所有内容之上的视图。无需创建虚拟控制器,只是将其嵌入 UIPopoverController。 它对于没有弹出框控制器但您可能想要模仿类似的东西的 iPhone 尤其有用。 是的,它当然解决了我的问题:如果 该应用程序退出激活,在任何内容上添加一个覆盖窗口 当前显示以防止 ios 截取您的屏幕截图 应用的当前内容。

【讨论】:

很棒的答案。谢谢【参考方案2】:

一般一个应用程序只需要1个UIWindow,但还是有一些场景需要在一个应用程序中使用多个UIWindow。

例如,您希望在系统 AlertViews 的顶部显示一个视图,或者可以使用默认键盘。

UIWindows 是特殊的 UIView,其显示顺序由 .windowLevel 属性控制。

您不需要添加新的 UIWindow 作为任何视图的子视图。您可以简单地创建一个新的 UIWindow 并调用窗口 setHidden:NO 或窗口 makeKeyAndVisible 取决于您给它的级别。

定义了三个默认的窗口枚举级别:

UIWindowLevelNormal UIWindowLevelStatusBar UIWindowLevelAlert

【讨论】:

【参考方案3】:

当然它可以有多个窗口。只是,一次只能显示一个,那就是keyWindow。您可以将多个窗口存储在数组或其他形式中,并在您想要显示它们时将它们设为keyWindow

是的,阅读@Mannopson 建议的文档,它非常有用。

【讨论】:

您可以在给定时间显示任意数量的 UIWindows,而不是一个。 keywindow 是接收非触摸事件的那个,例如键盘。

以上是关于iOS 应用程序是不是有可能拥有多个窗口?的主要内容,如果未能解决你的问题,请参考以下文章

如何查看程序所占端口号和IP

Apple Watch 应用程序是不是需要随附的 iOS 应用程序才能拥有完整的用户界面?

拥有更大图像尺寸的风险是什么?

iOS App:窗口旋转总是纵向而不是横向

是否可以在一个 iOS 应用程序上拥有多个核心数据“数据库”?

视图控制器的全局实例是不是应该由应用程序委托拥有