优点,问题,添加另一个UIWindow到iOS应用程序的例子?

最近我一直在想,一个iOS应用程序只有一个UIWindow的事实。 创build另一个UIWindow并将其放置在屏幕上似乎没有问题。

我的问题有点含糊,但我感兴趣的是:

  • 我可以用第二个UIWindow实现其他方式无法完成的事情?
  • 使用多个UIWindow实例时会出现什么问题?
  • 我看到人们使用第二个UIWindow在iPhone上显示像视图一样的popup窗口。 这是做这件事的好方法吗? 为什么? 为什么不?
  • 还有其他的例子,让另一个UIWindow变得非常有意义吗?

这不是我错过了什么。 我从来没有觉得需要创build另一个UIWindow实例,但也许它会允许做我不知道的惊人的事情! 🙂

我希望它可以帮助我解决这个问题:我需要添加一个“覆盖视图”,无论目前显示。 如果已经存在一个或多个模态控制器,它也应该工作。 如果我添加一个UIView到根控制器的视图,模式控制器坐在上面,所以popup控制器。 如果我以模态方式呈现封面视图,并且已经有模式控制器,则只覆盖屏幕的一部分。

UIWindow可以像系统键盘一样浮在其他UI元素之上。

要解决您的最后一段:使用与主窗口相同的框架来制作一个UIWindow 。 将其windowLevel属性设置为UIWindowLevelStatusBar 。 将其hidden属性设置为NO

从罗布的回答开始,我玩了一下,想写下一些笔记给其他人试图获得有关这个话题的信息:

  • 添加另一个UIWindow并不是一个问题。 只需创build一个makeKeyAndVisible 。 完成。
  • 通过使另一个窗口可见,将其删除,然后释放您不再需要的窗口。
  • “键”的窗口接收所有的键盘input。
  • UIWindow涵盖了一切,甚至莫代尔,popup等。太棒了!
  • UIWindow总是隐式的画像。 它没有旋转。 您将不得不添加一个控制器作为新窗口的根控制器,并让它处理旋转。 (就像主窗口一样)
  • 窗口的高度决定了显示“高”的程度。 将其设置为UIWindowLevelStatusBar以覆盖所有内容。 将其hidden属性设置为NO。
  • 第二个UIWindow可以用来在屏幕上显示浮动在一切之上的视图。 UIPopoverController创build一个虚拟控制器来embedded到UIPopoverController
  • 它可以是特别有用的iPhone没有popup控制器,但你可能想模仿的东西。
  • 是的,这当然解决了我的问题:如果应用程序停止激活,请在当前显示的任何内容上添加封面窗口,以防止iOS截取应用程序的当前内容。