一个 iOS 应用程序是否可以有多个 window?

Is it possible that an iOS application can have more than one window?

我在面试中被问过很多次这个问题,到处都找不到合适的地方answer.So最后在这里发布这个问题。

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

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

你可以通过这个。

是的,您可以有多个 windows。一个键 window 是接收用户输入的键。

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

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

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

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

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

控制。

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

定义了三个默认 window 枚举级别:

  • UIWindowLevelNormal
  • UIWindowLevelStatusBar
  • UIWindowLevelAlert