web-dev-qa-db-ja.com

マルチウィンドウのSceneDelegate Xcode 11に相当する現在のキーウィンドウを取得するにはどうすればよいですか?

IPadOS用のiOS13アプリをSceneDelegate(マルチウィンドウ)に変換しています。

現在のSceneDelegateから現在のUIWindowを取得するにはどうすればよいですか?

UIView.windowまたはUIViewController.view.windowを使用して現在のシーンにアクセスできることは知っていますが、スナックバーを表示するためにウィンドウ(iOS12までのkeyWindow)を取得する必要がある非UIクラス(AppDelegate)があります。すべてのトップ。

以前は[UIApplication sharedApplication].keyWindowをやっていましたが、今はもちろん、それは間違っています。

5
Fabiosoft

このロジックをSceneDelegateに移動したいようです。

これで、SceneDelegateはウィンドウがシーンに接続されているかどうかを認識しているため、接続されているすべてのシーンでスナックバーを駆動しているイベントをリッスンして、ウィンドウに表示することは理にかなっています。これにより、すべての表示ウィンドウにスナックバー(1つ以上)が表示されます。

1
Mark

あなたは試すことができます:

    if let window = UIApplication.shared.windows.first(where: { (window) -> Bool in window.isKeyWindow}) {
    //your code
    }

お役に立てれば!

1
Georges Samaha

これで、シーンごとに1つ以上のウィンドウができました。まず、使用時に必要なものに答える必要があります。

おそらく、現在アクティブなシーンのウィンドウを取得したいのであれば、これを使用できます。

    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.