web-dev-qa-db-fra.com

Comment la vue est-elle initialisée lorsqu'elle est chargée via un storyboard?

Lorsque la vue est chargée manuellement, le développeur garde le contrôle en ce qui concerne les initialisations, nous choisissons quel initialiseur appeler, quelles variables définir, etc.

Lorsque la vue est chargée à partir de la séquence de storyboard ... qu'arrive-t-il à cet initialiseur? Où les variables doivent-elles être définies Je voudrais être disponible une fois la vue chargée?

Veuillez m'aider à comprendre la séquence ici. Comment l'instance de la classe est-elle créée ici, qui la crée et comment pouvons-nous intervenir et l'aider à la mettre en place à notre guise?

59
JAM

Lorsqu'une vue est chargée à partir d'une plume ou d'un storyboard, c'est -initWithCoder: la méthode est appelée. Comme -initWithFrame:, -initWithCoder: est un initialiseur désigné pour UIView. Si vous souhaitez effectuer une initialisation personnalisée pour une sous-classe UIView, vous devez vous assurer que cela se produit pour ces deux méthodes. Une technique courante consiste à ajouter une méthode d'initialisation commune que vous appelez des deux -initWithFrame: et -initWithCoder:. Voir ma réponse à Affichage personnalisé et implémentation de la méthode init? pour une description plus détaillée.

Notez que la documentation de -initWithFrame: explique:

Si vous utilisez Interface Builder pour concevoir votre interface, cette méthode n'est pas appelée lorsque vos objets de vue sont ensuite chargés à partir du fichier nib. Les objets d'un fichier nib sont reconstitués puis initialisés à l'aide de leur méthode initWithCoder: qui modifie les attributs de la vue pour correspondre aux attributs stockés dans le fichier nib.

92
Caleb