Sponsoring
Xcode11以降で新しいUIWindowを追加する方法
Xcode10以下の書き方
Windowを新しく追加して、そのWindow上にUIAlertViewControllerのアラートを表示したい時に今までは以下のように書いていました。
let newWindow = UIWindow(frame: UIScreen.main.bounds)
newWindow.rootViewController = UIViewController()
newWindow.windowLevel = UIWindow.Level.alert + 1
newWindow.makeKeyAndVisible()
Xcode11以上 & UISceneを使用する時の書き方
ところが、Xcode11/iOS13からはSceneDelegateを使用するようになったため、上記の書き方では上手く動かなくなりました。
そこで以下のようにWindowを追加すると、上手く動きます。
guard let windowScene = UIApplication.shared.connectedScenes
.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene else { return }
let window = UIWindow(windowScene: windowScene)
// あとは上記と同じ
これで既存のViewControllerを使用せず、新しいWindowを追加することで、モーダルやアラートを表示できます。
UIWindow関連のextension
UIWindowやkeyWindowを使用する時に、以下のようなextensionを作成すると、便利です。
extension UIApplication {
var windowScene: UIWindowScene? {
return connectedScenes
.first(where: { $0.activationState == .foregroundActive }) as? UIWindowScene
}
// keyWindowは以下のように取得できます。
var keyWindow: UIWindow? {
return windowScene?.windows
.first(where: { $0.isKeyWindow })
}
}
修正点あれば、指摘いただけると、ありがたいです。
0
Sponsoring