J'ai créé une vue dans un xib (avec un indicateur d'activité, une vue de progression et une étiquette). Ensuite, j'ai créé des fichiers .h/.m:
#import <UIKit/UIKit.h>
@interface MyCustomView : UIView {
IBOutlet UIActivityIndicatorView *actIndicator;
IBOutlet UIProgressView *progressBar;
IBOutlet UILabel *statusMsg;
}
@end
#import "MyCustomView.h"
@implementation MyCustomView
- (id)initWithFrame:(CGRect)frame {
if ((self = [super initWithFrame:frame])) {
// Initialization code
}
return self;
}
- (void)dealloc {
[super dealloc];
}
@end
Dans IB, je définis le propriétaire du fichier et affiche l'identité sur MyCustomView et connecte l'IBOutlet au propriétaire du fichier
Dans MyViewController.m, j'ai:
- (void)viewDidLoad {
[super viewDidLoad];
UIView *subView = [[MyCustomView alloc] initWithFrame:myTableView.frame];
[subView setBackgroundColor:[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5]];
[myTableView addSubview:subView];
[subView release];
}
Lorsque j'exécute l'application, la vue est ajoutée, mais je ne vois pas l'étiquette, la barre de progression et l'indicateur d'activité.
Qu'est-ce que je fais mal?
Vous devez le charger en utilisant la méthode -loadNibNamed
. -initWithNibName
Est réservé aux UIViewControllers.
Ajoutez le code suivant à votre méthode d'initialisation MyCustomView:
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"MyCustomView" owner:self options:nil];
UIView *mainView = [subviewArray objectAtIndex:0];
[self addSubview:mainView];
N'oubliez pas que si vous initialisez un objet à partir d'une plume, il appelle - (id)initWithCoder:(NSCoder *)aDecoder
pour initialiser, vous devrez donc le remplacer si vous créez l'objet MyCustomView dans la plume. Si vous le faites simplement avec initWithFrame:
, Remplacez simplement cela et ajoutez le code ci-dessus. De plus, dans votre nib, assurez-vous que vous avez un UIView de niveau supérieur et placez tous les autres éléments à l'intérieur (cela garantit que votre subviewArray n'a qu'une seule entrée).
Cela chargera les vues depuis la plume et les ajoutera à l'objet, et devrait faire l'affaire.
Je pense que vous devez utiliser cette méthode:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;
C'est parce que vous devez lui passer le nom de fichier .xib dans le "nibNameOrNil".
Comme l'a dit Hocker, vous devez utiliser cette méthode en passant le nom XIB (sans l'extension).
Ensuite, vous devez contrôler cette liste:
Esperons que ça marche. À votre santé.