iOS 应用程序是否可以有多个窗口?

问题描述 投票:0回答:3

我在面试中多次被问到这个问题,到处搜索都没有得到正确的答案。所以最后在这里发布这个问题。

ios uiwindow
3个回答
51
投票

你可能会经历这个。

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

从罗布的回答开始,我玩了一下,想为其他试图获取有关此主题的信息的人写下一些注释:

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

7
投票

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

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

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

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

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

  • UIWindowLevelNormal
  • UIWindowLevelStatusBar
  • UIWindowLevelAlert

-1
投票

当然可以有多个窗口。只是,一次只能显示一个,那就是

keyWindow
。您可以将多个窗口存储在数组或其他任何形式中,并在您想要显示它们时将它们设为
keyWindow

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

© www.soinside.com 2019 - 2024. All rights reserved.