iOS 应用程序是不是有可能拥有多个窗口?
Posted
技术标签:
【中文标题】iOS 应用程序是不是有可能拥有多个窗口?【英文标题】:Is it possible that an iOS application can have more than one window?iOS 应用程序是否有可能拥有多个窗口? 【发布时间】:2017-10-27 12:35:37 【问题描述】:我在面试中被问过很多次这个问题,搜索了每个地方都没有得到任何正确的答案。所以最后在这里发布这个问题。
【问题讨论】:
看看这个! developer.apple.com/documentation/uikit/uiwindow 是的,它可以有多个窗口;但一个只能同时是 key。您对使用多个窗口有什么计划? 【参考方案1】:你可以通过这个。
是的,您可以有多个窗口。关键窗口是接收用户输入的窗口。
从 Rob 的回答开始,我玩了一会儿,想为其他试图获取有关此主题的信息的人写一些笔记:
-
添加另一个 UIWindow 完全没有问题。只需创建一个
和 makeKeyAndVisible。完毕。
通过创建另一个窗口将其删除
可见,然后释放你不再需要的那个。
“key”窗口接收所有键盘输入。
UIWindow 涵盖了所有内容,甚至包括模态框、弹出框等。太棒了!
UIWindow 总是隐式的纵向显示。它不旋转。
您必须将控制器添加到新窗口的根控制器并让它处理旋转。
(就像主窗口一样)窗口的级别决定
它显示得有多“高”。将其设置为 UIWindowLevelStatusBar 以使其涵盖所有内容。
将其隐藏属性设置为 NO。第二个
UIWindow 可用于在屏幕上显示浮动在所有内容之上的视图。无需创建虚拟控制器,只是将其嵌入 UIPopoverController。
它对于没有弹出框控制器但您可能想要模仿类似的东西的 iPhone 尤其有用。
是的,它当然解决了我的问题:如果
该应用程序退出激活,在任何内容上添加一个覆盖窗口
当前显示以防止 ios 截取您的屏幕截图
应用的当前内容。
【讨论】:
很棒的答案。谢谢【参考方案2】:一般一个应用程序只需要1个UIWindow,但还是有一些场景需要在一个应用程序中使用多个UIWindow。
例如,您希望在系统 AlertViews 的顶部显示一个视图,或者可以使用默认键盘。
UIWindows 是特殊的 UIView,其显示顺序由 .windowLevel 属性控制。
您不需要添加新的 UIWindow 作为任何视图的子视图。您可以简单地创建一个新的 UIWindow 并调用窗口 setHidden:NO 或窗口 makeKeyAndVisible 取决于您给它的级别。
定义了三个默认的窗口枚举级别:
UIWindowLevelNormal UIWindowLevelStatusBar UIWindowLevelAlert【讨论】:
【参考方案3】:当然它可以有多个窗口。只是,一次只能显示一个,那就是keyWindow
。您可以将多个窗口存储在数组或其他形式中,并在您想要显示它们时将它们设为keyWindow
。
是的,阅读@Mannopson 建议的文档,它非常有用。
【讨论】:
您可以在给定时间显示任意数量的 UIWindows,而不是一个。keywindow
是接收非触摸事件的那个,例如键盘。以上是关于iOS 应用程序是不是有可能拥有多个窗口?的主要内容,如果未能解决你的问题,请参考以下文章
Apple Watch 应用程序是不是需要随附的 iOS 应用程序才能拥有完整的用户界面?