首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取多窗口SceneDelegate Xcode11的当前keywindow等效项?

如何获取多窗口SceneDelegate Xcode11的当前keywindow等效项?
EN

Stack Overflow用户
提问于 2019-07-12 22:42:46
回答 6查看 7.1K关注 0票数 7

我正在将我的用于iPadOS的iOS13应用程序转换为SceneDelegate (多窗口)。

如何从当前SceneDelegate获取当前UIWindow?

我知道可以使用UIView.windowUIViewController.view.window访问当前场景,但我有一个非UI类(AppDelegate),在这个类中,我需要让窗口(keyWindow到iOS12)在所有内容之上显示一个快餐栏。

我曾经做过[UIApplication sharedApplication].keyWindow,但现在,当然,那是错误的。

EN

回答 6

Stack Overflow用户

发布于 2019-11-03 01:31:14

Swift 5.x / iOS 13.x

受许多解决方案的启发,为了找回我的旧窗口属性(在connectedScenes中搜索它),我实现了一个小小的扩展:

代码语言:javascript
运行
复制
extension UIApplication {
    var currentWindow: UIWindow? {
        connectedScenes
        .filter({$0.activationState == .foregroundActive})
        .map({$0 as? UIWindowScene})
        .compactMap({$0})
        .first?.windows
        .filter({$0.isKeyWindow}).first
    }
}

使用

代码语言:javascript
运行
复制
if let window = UIApplication.shared.currentWindow { 
   // do whatever you want with window
}
票数 10
EN

Stack Overflow用户

发布于 2019-09-18 00:23:21

您需要简单地遍历所有窗口并手动查找key窗口。

代码语言:javascript
运行
复制
for (UIWindow *window in [UIApplication sharedApplication].windows) {
    if (window.isKeyWindow) {
        // you have the key window
        break;
    }
}

不要使用UISceneActivationStateForegroundActive作为检查。这意味着一些不同的东西,人们通过使用逻辑来找到第一个UISceneActivationStateForegroundActive窗口场景来引入错误。

票数 6
EN

Stack Overflow用户

发布于 2019-08-30 12:07:18

听起来你可能想把这个逻辑转移到你的SceneDelegate上。

SceneDelegate现在知道窗口是否连接到场景,因此让每个连接的场景监听驱动小吃店的事件,并在窗口上显示它可能是有意义的。这将导致每个可见窗口都显示快餐店(1个或更多)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57009283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档