web-dev-qa-db-fra.com

Ajout d'une nouvelle fenêtre d'interface utilisateur à la scène sur iOS13

J'ajoute une nouvelle fenêtre d'interface utilisateur pour afficher le contrôleur de vue du code d'accès lorsque l'application entre au premier plan.

Avant iOS 13 dans AppDelegate, j'avais la propriété var passcodeWindow = UIWindow(frame: UIScreen.main.bounds) où mon rootViewController était le contrôleur de vue du code d'accès et dans la méthode applicationWillEnterForeground je faisais passcodeWindow.makeKeyAndVisible() pour le placer au sommet.

Maintenant, quand je veux implémenter la fonctionnalité de mot de passe dans iOS 13, il y a un problème avec cette approche. Je l'ai déplacé vers la méthode sceneWillEnterForeground dans SceneDelegate, mais il semble que je ne puisse pas afficher passcodeWindow en haut de la fenêtre réelle de cette scène.

Je le fais exactement de la même manière que dans AppDelegate et le passcodeWindow n'est pas affiché.

La façon dont je le fais dans sceneWillEnterForeground dans AppDelegate et dans SceneDelegate:

passcodeWindow.rootViewController = passcodeViewController(type: .unlock)
passcodeWindow.makeKeyAndVisible()

Je m'attends à ce que passcodeWindow s'affiche en haut de la fenêtre actuelle de la scène.

8
Kamil Chmiel

Vous pouvez essayer ceci:

if #available(iOS 13.0, *) {
    if let currentWindowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
        passcodeWindow.windowScene = currentWindowScene
    }
}
4
RichardLiu