J'ai créé un UIView
personnalisé avec un xib.
De plus, j'ai un UIViewController
dans mon storyboard, auquel j'ai ajouté un UIView
et défini sa classe pour être mon UIView
personnalisé.
Mais lorsque j'exécute l'application, la vue n'a pas ses sous-vues. Lorsque je débogue, toutes les sous-vues sont nulles.
Dans .m du UIView
personnalisé, ces méthodes init sont présentes:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
Qu'est-ce que je rate?
Comme vous le savez déjà, avec un UIViewController
nous avons le -initWithNibName:bundle:
méthode pour le connecter à un xib.
Mais...
Lorsqu'il s'agit d'un UIView
, vous devez utiliser -loadNibNamed:owner:options:
et chargez-le avec le xib. ( simplement spécifier une classe personnalisée à la vue dans le xib ne fonctionnera pas)
UIView
appelée CustomXIBView
UIView
)CustomXIBView
CustomXIBView
View
( barre d'outils gauche)Show Identity Inspector
( 3e option dans le panneau de droite)CustomXIBView
comme classe personnalisée de View
CustomXIBView
's File's Owner
dans la plumeCustomXIBView.h
//To load `CustomXIBView` from any `UIViewController` or other class:
//instead of the following commented code, do the uncommented code
//CustomXIBView *myCustomXIBViewObj = [CustomXIBView alloc] init];
//[myCustomXIBViewObj setFrame:CGRectMake(0,0,320,480)];
//Do this:
CustomXIBView *myCustomXIBViewObj =
[[[NSBundle mainBundle] loadNibNamed:@"someView"
owner:self
options:nil]
objectAtIndex:0];
[myCustomXIBViewObj setFrame:CGRect(0,
0,
myCustomXIBViewObj.frame.size.width,
myCustomXIBViewObj.frame.size.height)];
[self.view addSubview:myCustomXIBViewObj];