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

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

【问题讨论】:

标签: ios uiwindow


【解决方案1】:

你可以通过这个。

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

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

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

【讨论】:

  • 很棒的答案。谢谢
【解决方案2】:

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

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

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

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

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

  • UIWindowLevelNormal
  • UIWindowLevelStatusBar
  • UIWindowLevelAlert

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 您可以在给定时间显示任意数量的 UIWindows,而不是一个。 keywindow 是接收非触摸事件的那个,例如键盘。
    猜你喜欢
    • 2011-01-09
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多