iOS应用程序可能有多个窗口吗?

Bha*_*han 10 uiwindow ios

我在面试中多次被问到这个问题,每次都没有得到任何正确的答案.所以最后在这里发布这个问题.

Kar*_*mar 23

你可以通过这个.

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

从Rob的回答开始,我玩了一下,并希望为其他人写下一些笔记,试图获得有关此主题的信息:

  1. 添加另一个UIWindow根本不是问题.只需创建一个和makeKeyAndVisible.完成.
  2. 通过显示另一个窗口将其删除,然后释放您不再需要的窗口.
  3. "key"窗口接收所有键盘输入.
  4. UIWindow涵盖了一切,甚至是模态,弹出窗口等等.太棒了!
  5. UIWindow始终是隐式的纵向.它不旋转.
  6. 您必须将控制器添加到新窗口的根控制器并让它处理旋转.
  7. (就像主窗口一样)窗口的级别决定了它显示的"高"程度.将其设置为UIWindowLevelStatusBar以使其涵盖所有内容.
  8. 将其隐藏属性设置为NO.第二个UIWindow可用于在屏幕上显示浮动在所有内容之上的视图.无需创建虚拟控制器只是为了将其嵌入UIPopoverController中.
  9. 对于没有弹出控制器的iPhone而言,它可能特别有用,但你可能想要模仿类似的东西.
  10. 是的,当然,它解决了我的问题:如果应用程序重新启动激活,请在当前显示的任何内容上添加封面窗口,以防止iOS截取应用当前内容的屏幕截图.


小智 5

一般一个应用程序只需要1个UIWindow,但仍然可能有一些场景需要在一个应用程序中使用多个UIWindow。

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

UIWindows 是特殊的 UIViews,它们的显示顺序由 .windowLevel 属性控制。

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

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

  • UIWindowLevelNormal
  • UIWindowLevelStatusBar
  • UIWindowLevelAlert