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

时间:2017-10-27 12:35:38

标签: ios uiwindow

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

3 个答案:

答案 0 :(得分:19)

你可以通过这个。

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

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

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

答案 1 :(得分:2)

通常一个应用程序只需要1个UIWindow,但仍有一些情况需要在一个应用程序中使用多个UIWindow。

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

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

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

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

  • UIWindowLevelNormal
  • UIWindowLevelStatusBar
  • UIWindowLevelAlert

答案 2 :(得分:1)

当然它可以有多个窗口。只是,一次只显示一个,即keyWindow。您可以将多个窗口存储在数组或任何位置,并在要显示它们时使它们keyWindow

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