IPadOS用のiOS13アプリをSceneDelegate(マルチウィンドウ)に変換しています。
現在のSceneDelegateから現在のUIWindowを取得するにはどうすればよいですか?
がUIView.window
またはUIViewController.view.window
を使用して現在のシーンにアクセスできることは知っていますが、スナックバーを表示するためにウィンドウ(iOS12までのkeyWindow)を取得する必要がある非UIクラス(AppDelegate)があります。すべてのトップ。
以前は[UIApplication sharedApplication].keyWindow
をやっていましたが、今はもちろん、それは間違っています。
このロジックをSceneDelegateに移動したいようです。
これで、SceneDelegateはウィンドウがシーンに接続されているかどうかを認識しているため、接続されているすべてのシーンでスナックバーを駆動しているイベントをリッスンして、ウィンドウに表示することは理にかなっています。これにより、すべての表示ウィンドウにスナックバー(1つ以上)が表示されます。
あなたは試すことができます:
if let window = UIApplication.shared.windows.first(where: { (window) -> Bool in window.isKeyWindow}) {
//your code
}
お役に立てれば!
これで、シーンごとに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;
}
}
}