Как получить доступ к родительскому контроллеру представления? - PullRequest
0 голосов
/ 03 мая 2010

Я использую этот код, чтобы выдвинуть контроллер представления в ViewControllerA:

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];

В DatePickerViewController, который вставлен, есть текстовое поле. В ViewControllerA как получить значение этого текстового поля после запуска метода viewWillDisappear, чтобы сохранить данные.

1 Ответ

2 голосов
/ 03 мая 2010

Есть несколько способов сделать это. Лучше всего использовать шаблон делегата или систему уведомлений.

Какой из них вы выберете, зависит от ваших желаний. Если вы просто хотите, чтобы «родительский контроллер» знал о значении, используйте метод делегата.

Использование делегатов или уведомлений создает слабосвязанную структуру и делает возможным использование повторно используемых классов.

РЕДАКТИРОВАТЬ: Пример кода. Осторожно: непроверенный и от макушки!

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...