fre*_*ing 7 ipad xcode11 swift5.1 uiscene
UIScene当连接多个场景时,我无法获取电流。
具体来说,我的应用程序(iOS 13)支持 iPad 上的多个窗口。当我有两个并排的窗口并访问应用程序连接的场景时(使用UIApplication.shared.connectedScenes),它们都activationState设置为.foregroundActive. 但我实际上只与其中之一互动。
我在 stackoverflow 上找到了一些代码来检索当前的关键窗口(不记得是谁发布的),但正如您所见,它总是会返回两个窗口之一。
let keyWindow: UIWindow? = UIApplication.shared.connectedScenes
.filter({$0.activationState == .foregroundActive})
.map({$0 as? UIWindowScene})
.compactMap({$0})
.first?.windows
.filter({$0.isKeyWindow}).first
Run Code Online (Sandbox Code Playgroud)
我是否缺少某些方法来确定与之交互的最后一个窗口,或者多个.foregroundActive状态是否是错误?
谢谢!
Saa*_*afo 10
尽管UIApplication.shared.keyWindow在 iOS 13.0 后被 Apple 弃用,但似乎此属性可以帮助您在前台有多个场景时找到活动的场景,方法是:
UIApplication.shared.keyWindow?.windowScene
Run Code Online (Sandbox Code Playgroud)
我通过重构代码找到了问题的解决方案,以便现在我可以通过任何视图或视图控制器的属性访问当前UIScene窗口。window这样我就不再需要了keyWindow。
我认为两个相邻打开的窗口可能是正确的activationState .foregroundActive
如果有人需要它,这些是帮助我从应用程序中的任何位置访问当前窗口的两个扩展:
extension UIViewController {
var window: UIWindow? {
return view.window
}
}
extension UIScene {
var window: UIWindow? {
return (delegate as? SceneDelegate)?.window
}
}
Run Code Online (Sandbox Code Playgroud)
但如果您无法访问UIView,UIViewController或 ,问题仍然存在UIScene。例如,在不引用视图或场景的数据模型内。然后我没有找到一种方法来一致地访问用户正在交互的正确窗口。
| 归档时间: |
|
| 查看次数: |
2163 次 |
| 最近记录: |