Je convertis mon application iOS13 pour iPadOS en SceneDelegate (multi-fenêtres).
Comment puis-je obtenir la fenêtre UIWindow actuelle du SceneDelegate actuel?
Je sais que a peut accéder à la scène actuelle en utilisant UIView.window
ou UIViewController.view.window
, mais j'ai une classe non UI (AppDelegate) où j'ai besoin d'obtenir la fenêtre (keyWindow jusqu'à iOS12) pour afficher un snack-bar au-dessus de tout.
Autrefois, je faisais [UIApplication sharedApplication].keyWindow
mais maintenant, bien sûr, c'est faux.
Il semble que vous souhaitiez probablement déplacer cette logique vers votre SceneDelegate.
Le SceneDelegate sait maintenant si la fenêtre est connectée à la scène, il peut donc être judicieux que chaque scène connectée écoute quel que soit l'événement qui anime le snack-bar et l'affiche sur sa fenêtre. Cela entraînerait alors chaque fenêtre visible montrant le snack-bar (1 ou plus).
Tu pourrais essayer:
if let window = UIApplication.shared.windows.first(where: { (window) -> Bool in window.isKeyWindow}) {
//your code
}
J'espère que cela t'aides!
Vous avez maintenant plus d'une fenêtre, une pour chaque scène. Tout d'abord, vous devez répondre à celle dont vous avez besoin au moment de l'utilisation.
Vous souhaitez probablement obtenir la fenêtre de la scène actuellement active, vous pouvez alors utiliser ceci:
UIWindow* window = nil;
if (@available(iOS 13.0, *))
{
for (UIWindowScene* wScene in [UIApplication sharedApplication].connectedScenes)
{
if (wScene.activationState == UISceneActivationStateForegroundActive)
{
window = wScene.windows.firstObject;
break;
}
}
}