Quest-ce que UIWindow dans Swift? Un seul contrôleur de vue contient-il plusieurs fenêtres?


Meilleure réponse

UIWindow est une classe dans UIKit, le framework dinterface utilisateur pour iOS (et tvOS et watchOS).

Lorsque vous lancez une application, le processus habituel pour afficher quelque chose consiste à créer une UIWindow, créer un UIViewController avec la vue que vous souhaitez afficher, puis définir le «contrôleur de vue racine» de UIWindow sur UIViewController.

Si vous créez une application basée sur un storyboard, cela est fait pour vous. Vous pouvez définir «linterface principale», et ce fichier .storyboard sera chargé en tant que contrôleur de vue racine. Vous pouvez accéder à cette UIWindow dans AppDelegate.

Si vous nutilisez pas de storyboards, vous avez besoin de quelque chose comme ce morceau de code

var window: UIWindow?

func application(\_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

window = UIWindow(frame: UIScreen.main.bounds)

let vc = CustomViewController()

window?.rootViewController = vc

window?.makeKeyAndVisible()

}

dans la fonction didFinishLaunching dAppDelegate pour créer lUIWindow et définir son contrôleur de vue racine sur votre application. Notez que pour rendre UIWindow visible à lécran, il vous suffit de le définir comme visible, plutôt que de lajouter en tant que sous-vue ou de le placer dans une autre hiérarchie.

Habituellement, pour afficher plus de contrôleurs de vue, dautres que le contrôleur de vue racine, vous pouvez les présenter de manière modale ou utiliser un contrôleur de navigation / onglet, il ny a donc pas vraiment beaucoup de raisons de créer plus de fenêtres dans votre application.

Une des raisons pourrait être dafficher une alerte ou disposez dun système de notification intégré à lapplication, dans lequel vous souhaitez afficher un élément dinterface utilisateur au-dessus de tout le reste de votre application (au-dessus même du clavier et de certaines alertes système, je crois).

Ou si votre application profite réellement deux écrans (cest-à-dire via AirPlay), vous devrez alors créer une nouvelle UIWindow, régler son écran sur celui de lécran secondaire, définir son contrôleur de vue racine, puis le définir comme visible.

Pour adresser directement votre deuxième question, je suppose que vous pourriez ajouter plusieurs UIWindows en tant que sous-vues de la vue dun contrôleur de vue (comme UIWindow fait une sous-classe UIView), mais ce nest certainement pas ainsi quils sont habituellement utilisés, et je ne sais pas vraiment à quoi cela ressemblerait.

Réponse

Tout dabord, UIWindow na rien à voir avec Swift. Il ne fait en aucun cas partie du langage Swift. Il fait partie du framework UIKit dApple, qui est actuellement le framework dinterface utilisateur par défaut pour iOS (et qui sera bientôt le framework dinterface utilisateur par défaut pour MacOS). UIViewController fait également partie dUIKit.

Une UIWindow est ce qui contient linterface utilisateur de votre application. Cest ce qui distribue les événements dinteraction des utilisateurs à vos vues. Une application iOS typique a une seule UIWindow.

Un UIViewController ne contient aucun aucun objets UIWindow et serait une mauvaise décision de conception si cétait le cas.

Je recommande de lire la documentation: UIKit | Documentation pour les développeurs Apple

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *