0

J'utilise ce code pour pousser un contrôleur de vue en ViewControllerA:Comment accéder au contrôleur de vue parent?

DatePickerViewController *viewController = [[DatePickerViewController alloc] initWithNibName:@"DatePickerViewController" bundle:nil]; 
NSMutableArray *info = [[NSMutableArray alloc] initWithObjects:@"Exam Duration",nil]; 
[viewController setInfo:info]; 
[info release]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

Dans le DatePickerViewController qui est glissé dans, il a un champ de texte. Dans ViewControllerA comment puis-je obtenir la valeur de ce champ de texte une fois la méthode viewWillDisappear est lancée, c'est pour enregistrer des données.

Répondre

2

Il existe plusieurs façons de procéder. Le mieux serait d'utiliser un modèle de délégué ou un système de notification.

Lequel vous choisissez dépend de vos souhaits. Si vous voulez simplement que le 'contrôleur parent' connaisse la valeur, utilisez une méthode déléguée. L'utilisation de délégués ou de notifications crée une structure faiblement couplée et rend possible les classes réutilisables.

EDIT: un exemple de code. Attention: non testé et du haut de ma tête!

DatePickerViewController.h

@protocol DatePickerViewControllerDelegate 
    -(void)datePicker:(DatePickerViewController *)picker pickedDate:(NSDate *)date; 
@end 

DatePickerViewController.m

- (void)viewWillDisappear:(BOOL)animated { 
    [self.delegate datePicker:self pickedDate:theDate]; //Delegate is an ivar 
    [super viewWillDisappear:animated]; 
} 

ViewControllerA.m

// 
DatePickerViewController *viewController = [[DatePickerViewController alloc] initWithNibName:@"DatePickerViewController" bundle:nil]; 
NSMutableArray *info = [[NSMutableArray alloc] initWithObjects:@"Exam Duration",nil]; 
[viewController setInfo:info]; 
[info release]; 
[viewController setDelegate:self]; // Set the delegate of the date picker 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 
// 

-(void)datePicker:(DatePickerViewController *)picker pickedDate:(NSDate *)date; { 
    //Deal with the new date here 
} 
+0

Que voulez-vous dire? Le délégué est un ivar? – tarnfeld

+0

Ivar signifie 'variable d'instance'. DatePickerViewController a une variable d'instance 'id delegate'. Dans cet exemple, c'est aussi une propriété: '@property (assign) id delegate' – Rengers

+0

Parfait! MERCI!! – tarnfeld

Questions connexes