• 30 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 02/11/2023

Découvrez UIView

Notre modèle est désormais tout beau tout propre ! Mais notre application semble toujours vierge lorsqu'on la lance ! Rassurez-vous, dans cette partie, nous allons nous occuper de la vue !

Pour la remplir, il nous faut savoir quoi mettre de dedans. Et dedans, nous allons mettre exclusivement des UIView ! Vous ne savez pas que c'est ? Vous ne pourrez plus le dire à la fin de chapitre !

Qu'est-ce que UIView ?

UIView, c'est la classe qui permet de définir une vue.

Et une vue, c'est quoi ?

Une vue, c'est une zone rectangulaire qui a deux missions :

  • Afficher des choses

  • Répondre à des gestes

Donc comme vous pouvez le constater, c'est très générique ! Ça n'a pas l'air bien puissant comme ça. Mais sachez que tout ce que vous voyez à l'écran dans n'importe quel page de n'importe qu'elle application iOS est une instance d'UIView.

Mais les boutons, les images ce sont des UIView aussi?

Eh oui ! Et ce, grâce à l'héritage. Prenons l'exemple d'un bouton. Les boutons en iOS sont définis avec une classe qui s'appelle UIButton. Cette classe comme toute celle que je vais vous présenter dans le prochain chapitre hérite de UIView. Donc elles disposent toutes de la logique présentent dans UIView, notamment le placement, l'affichage et la réponse aux gestes. Donc un indirectement, un bouton c'est une UIView.

La hiérarchie des vues

Comme les dossiers sur votre ordinateur, les vues ont une hiérarchie (on parle en anglais de view hierarchy). Cela veut dire qu'une vue, c'est comme un dossier. Elle peut contenir d'autres vues et elle peut-elle même être contenue dans une vue parente.

Exemple

Le meilleur moyen de bien comprendre ça, c'est d'essayer ! Ouvrez votre fichier Main.storyboard. Nous allons jouer un peu avec interface builder. Dans la bibliothèque des composants, choisissez l'objet UIView et glissez en quelques-uns dans votre interface.

De mon côté, j'ai composé mon interface comme ceci :

J'ai plusieurs vues qui sont les unes à côté des autres ou les unes dans les autres. Sur la gauche, vous pouvez voir la hiérarchie des vues. Je vous la montre ici également :

On a donc une vue principale qui a 4 sous vues :

  • La vue verte n'a pas de sous-vue

  • La vue rouge a 2 sous-vues blanches

  • La vue bleu clair a une sous-vue blanche

  • La vue bleu foncé a une sous-vue grise qui a elle-même une sous-vue blanche

En glissant les vues les unes dans les autres, vous créez votre hiérarchie. Pour des interfaces complexes qui peuvent compter une vingtaine de vues différentes, il est important de bien organiser votre hiérarchie pour vous y retrouver !

La vue principale

Vous avez noté dans l'exemple précédent que notre interface contenait déjà une vue : le grand rectangle blanc vertical.

En iOS, une page d'une application correspond (presque) toujours à un UIViewController. Cette classe (que nous verrons en détail dans la prochaine partie) a une propriété var view: UIView qui constitue la vue principale de votre interface.

Cela veut dire que toutes les vues que vous allez rajouter sont des descendantes de la vue principale de votre contrôleur. Elles sont toutes contenues dedans. C'est la racine de votre hiérarchie de vues.

Et le code ?

La plupart du temps, vous créerez vos vues directement avec Interface Builder. Mais il peut arriver que vous souhaitiez manipuler la hiérarchie de vos vues dans le code. Pour cela, la classe UIView a deux propriétés et deux méthodes à connaitre :

// Propriétés
var superview: UIView
var subviews: [UIView]

// Méthodes
func addSubview(_ view: UIView)
func removeFromSuperview()

La propriété superview permet d'accéder à la vue parente. Et la propriété subviews permet d'accéder au tableau des sous-vues.

Prenons un exemple pour les méthodes, mettons que j'ai une vue myView et un bouton myButton. Si je veux que le bouton soit inclus dans la vue, je fais ceci :

myView.addSubview(myButton)

Ensuite, si je souhaite retirer le bouton de la hiérarchie, j'écris :

myButton.removeFromSuperview()

Et le bouton ne sera plus visible à l'écran.

Pour votre information, je vous mentionne ici quelques autres méthodes qui pourront vous être utiles pour gérer la hiérarchie de vos vues :

func insertSubview(_ view: UIView, belowSubview siblingSubview: UIView)
func insertSubview(_ view: UIView, aboveSubview siblingSubview: UIView)
func bringSubview(toFront view: UIView)
func sendSubview(toBack view: UIView)

En résumé

  • Une UIView est une zone rectangulaire qui permet d'afficher des choses et de répondre à des gestes.

  • Tous les composants d'une interface héritent de la classe UIView.

  • Les vues dans une interface sont organisées selon une hiérarchie comme des dossiers. En particulier une vue peut avoir une vue parente et des sous-vues. Dans le code, on manipule la hiérarchie avec les propriétés et méthodes de UIView suivantes :

var superview: UIView
var subviews: [UIView]
func addSubview(_ view: UIView)
func removeFromSuperview()
Exemple de certificat de réussite
Exemple de certificat de réussite