web-dev-qa-db-fra.com

Comment obtenir l'équivalent actuel de la fenêtre de clé pour SceneDelegate Xcode 11 multi-fenêtres?

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.

5
Fabiosoft

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).

1
Mark

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!

1
Georges Samaha

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;
            }
        }
    }
0
WILL K.