J'ai ce dans le fichier MyClass.h:propriété IBInspectable n'a pas sa valeur initWithCoder: initialiseur
#import <UIKit/UIKit.h>
IB_DESIGNABLE
@interface MyClass : UIView
@end
et c'est le code du fichier .m:
-(void)awakeFromNib{
[super awakeFromNib];
NSLog(@"This works %lud",(unsigned long)self.max);
}
-(instancetype)initWithCoder:(NSCoder *)aDecoder{
if ((self = [super initWithCoder:aDecoder])){
NSLog(@"This doesn't work %lud",(unsigned long)self.max);
}
return self;
}
Dans la méthode awakeFromNib, j'obtiens une valeur correcte dans IB. Dans initWithCoder: j'obtiens cette valeur égale à zéro.
Quel est le moment approprié pour vérifier une valeur, définie dans IB, pour cette propriété?
C'est ainsi que je l'ai défini une propriété dans le fichier .m:
@interface MyClass()
@property (nonatomic) IBInspectable NSUInteger max;
@end
Merci. Eh bien, je n'ai pas encore vraiment compris quelle serait la manière la plus pratique d'utiliser ma classe, mais l'idée était la suivante: 1) Faites glisser une vue vers un storyboard (et définissez sa classe personnalisée sur MyClass), 2) Entrez des valeurs des propriétés inspectables. Aussi basé sur ces propriétés, je génère du contenu supplémentaire dans ma vue personnalisée (tout n'est pas visuel défini dans IB). Donc, lors de l'initialisation de ma vue, j'ai besoin des valeurs de ces propriétés définies dans IB. Si vous avez des suggestions ou des conseils sur ce flux, je suis tout ouïe. :) – Whirlwind
Ma réponse reste la même. Faites-le dans 'awakeFromNib', comme vous l'avez déjà déduit. Mais ce que je ferais, c'est attendre que le contrôleur de vue ait 'viewDidLoad'. C'est après que la vue a été créée mais avant qu'elle ne soit placée dans l'interface. Le contrôleur de vue a vraisemblablement une référence à cette vue afin qu'il puisse lui dire de finir de se configurer lui-même. – matt