2010-10-15 15 views
2

Comment devrais-je écrire une méthode d'initialisation pour une classe qui est sous-classement d'un NSObjectiPhone - Comment écrire une méthode init?

  • Disons que j'ai une classe nommée: CustomButton sous-classement UIButton
  • J'ai un fichier nib vide nommé CustomButton. plume qui a un seul UIButton dedans.
  • dans le générateur d'interface pour le classname le bouton est réglé sur « CustomButton »

Comment écririez-vous une méthode init pour cette classe afin qu'il charge à partir du fichier de pointe?

Répondre

7

Si vous avez besoin d'initialisation personnalisé à l'intérieur CustomButton, utilisez ceci:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     /* do initialization here */ 
    } 
return self; 
} 

Ce ne sera pas appelé si vous instancier le bouton directement dans le code, que lorsque instancié bu le chargeur de pointe. L'instanciation par le biais du code signifie que vous devez utiliser initWithFrame afin de remplacer celui-ci. Vous pouvez réellement vouloir initWithCoder et initWithFrame appeler la même méthode initAlways ou quelque chose. Il est également important de connaître le concept Objective-C d '«initializer désigné» (recherchez-le dans l'objectif C docs) car cela peut être un peu déroutant pour les personnes habituées aux autres langages OO.

+0

VEUILLEZ fournir la façon dont vous instancier l'objet en utilisant cette méthode init. la méthode init nécessite un NSCoder, 1- qu'est ce que nscorer? 2- Comment puis-je le créer? 3- Est-ce que j'appelle cette méthode directement? – aryaxt

+0

Vous ne l'instanciez pas vous-même. Le fichier nib est essentiellement un ensemble sérialisé d'objets chargés par le chargeur de plumes, de sorte que le chargeur de plumes manipule tous les trucs NSCoder pour vous. Vous devez juste vous assurer de faire [super ...] appel là-bas. Fondamentalement, surcharger initWithCoder comme ceci, insère simplement votre code dans l'instanciation de l'objet que le chargeur de plume fait. Espérons que cela a du sens .... – Nimrod

+0

En fait, vous voulez probablement utiliser awakeFromNib: à la place. J'ai oublié ça, bon sang. voir http://stackoverflow.com/questions/2663333/what-method-of-uiview-gets-called-when-instantiated-from-a-nib – Nimrod