La méthode Interface Builder crée des objets «lyophilisés» qui sont recréés lors de l'exécution lorsque vous initialisez l'objet à partir de la NIB. Il fait toujours les mêmes alloc
et init
choses, en utilisant NSCoder
objets pour mettre les objets en mémoire. Si vous souhaitez disposer d'un contrôleur de vue basé sur un NIB particulier, vous pouvez remplacer la méthode init par défaut et l'initialiser en fonction de la NIB de ce contrôleur de vue. Par exemple:
@implementation MyViewController
-(id) init {
if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {
//other setup stuff
}
return self;
}
Et quand vous voulez afficher le MyViewController
, vous simplement appeler quelque chose comme ceci:
- (void) showMyViewController {
MyViewController *viewController = [[[MyViewController alloc] init] autorelease];
[self presentModalViewController:viewController animated:YES];
}
Maintenant, si vous voulez créer votre point de vue manuellement au lieu de dans Interface Builder, vous n'avez pas besoin de changer votre méthode -showMyViewController
.Débarrassez-vous de votre -init
override, et au lieu substituer la méthode -loadView
de votre MyViewController
pour créer par programmation:
- (void) loadView {
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(320,460)];
self.view = view;
[view release];
//Create a button
UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(pressedButton) forControlEvents:UIControlEventTouchUpInside];
[myButton setTitle:@"Push Me!" forState:UIControlStateNormal];
myButton.frame = CGRectMake(100,230,80,44);
[self.view addSubview:myButton];
}
Cet exemple montre comment créer la vue et ajouter un bouton à lui. Si vous souhaitez conserver une référence, déclarez-le de la même manière que si vous utilisiez un NIB (sans IBOutlet/IBActions) et utilisez self
lors de l'affectation. Par exemple, votre tête pourrait ressembler à ceci:
@interface MyViewController : UIViewController {
UIButton *myButton;
}
- (void) pressedButton;
@property (nonatomic, retain) UIButton *myButton;
@end
Et votre classe:
@implementation MyViewController
@synthesize myButton;
- (void) loadView {
//Create the view as above
self.myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[myButton addTarget:self action:@selector(pressedButton) forControlEvents:UIControlEventTouchUpInside];
[myButton setTitle:@"Push Me!" forState:UIControlStateNormal];
myButton.frame = CGRectMake(100,230,80,44);
[self.view addSubview:myButton];
}
- (void) pressedButton {
//Do something interesting here
[[[[UIAlertView alloc] initWithTitle:@"Button Pressed" message:@"You totally just pressed the button" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK",nil] autorelease] show];
}
- (void) dealloc {
[myButton release];
[super dealloc];
}
Merci pour cela, c'est très utile. – vickirk