Передав данные из childView, сделайте parentView! - PullRequest
1 голос
/ 31 августа 2010

У меня возникают проблемы при передаче данных из childView в parentView внутри навигационного контроллера, когда пользователь нажимает кнопку "Назад".

Я попытался использовать viewWillDisappear, и он не вызывается.* Любые идеи?

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Для этого есть два основных метода:

Использование делегата

Определите простой протокол делегата для вашего ребенка.Как, например, если ваш ребенок используется для выбора какой-либо строки из списка вещей, то сделайте что-то вроде:

@protocol ChildViewControllerDelegate <NSObject>
-(void) childView: (ChildView*) didPickNameFromList: (NSString*) name;
@end

Ваш родитель просто реализует этот протокол делегата и будет иметь изменение, которое будет обновляться при выборесделано в клиенте.

Это очень стандартный метод, который также используется многими контроллерами представления, которые поставляются с iOS.Например, взгляните на ABPeoplePickerNavigationControllerDelegate.

Использование общего объекта (контейнера) *

Другой метод, который вы можете использовать, - это использование общего объектав котором дочерний контроллер представления может изменить значение.Родительский контроллер представления создал этот объект и хранит ссылку на него.Когда он отображает дочерний контроллер представления, он передает ему ссылку на общий объект, чтобы дочерний элемент мог устанавливать значения для него.Затем, когда родительский объект появляется снова, он может обновить свой статус на основе значений этого общего объекта.

Лично я предпочитаю технику № 1.

0 голосов
/ 01 сентября 2010

На самом деле я сделал что-то другое.

Я объявил переменную с типом parentController в дочернем контроллере.

И в parentController перед тем, как нажать на childController, я делаю это: objView.parentController = self;

Тогда я просто вызываю parentController.variableIwant = кое-что;На детском контроллере и Voile!

...