我正在将我的iOS13应用程序转换为iPadOS到SceneDelegate(多窗口)。
如何从当前SceneDelegate获取当前UIWindow?
我知道a可以使用UIView.window
或UIViewController.view.window
访问当前场景,但我有一个非UI类(AppDelegate),我需要在其中获取窗口(keyWindow直到iOS12)以在所有内容之上显示小吃店。
我以前用[UIApplication sharedApplication].keyWindow
,但现在,当然,这是错误的。
7条答案
按热度按时间zpqajqem1#
Swift 5.x / iOS 13.x
受许多解决方案的启发,为了恢复我的旧窗口属性(在connectedScenes中搜索它),我实现了一个小扩展:
字符串
用法:
型
beq87vna2#
你只需要遍历所有的窗口,然后手动找到关键窗口。
字符串
UISceneActivationStateForegroundActive
作为检查。这意味着一些不同的东西,人们通过使用逻辑来查找第一个UISceneActivationStateForegroundActive
窗口场景来引入bug。hjqgdpho3#
听起来您可能希望将此逻辑移动到SceneDelegate。
SceneDelegate现在知道窗口是否连接到场景,因此让每个连接的场景侦听驱动小吃店的任何事件并在其窗口上显示它可能是有意义的。然后,这将导致每个可见窗口显示小吃棒(1个或更多个)。
4smxwvx54#
您可以尝试:
字符串
希望这对你有帮助!
2jcobegt5#
现在您有多个窗口,每个场景一个。首先,你必须回答在使用的时候你需要哪一个。
也许你想获得当前活动场景的窗口,那么你可以使用这个:
字符串
kyks70gy6#
适用于
SwiftUI
,已在iOS 16及以上版本中测试字符串
这是惯例。
型
t98cgbkg7#
我还没有尝试过这个,但是你应该可以用
[UIApplication sharedApplication].windows
得到所有的窗口,然后选择是在所有窗口上显示小吃店还是在一个窗口上显示小吃店。