Передать данные обратно на предыдущий контроллер - PullRequest
16 голосов
/ 03 января 2012

У меня есть два контроллера в раскадровке, встроенных в NavigationController, и есть переключение между ними.

Передача данных с первого контроллера на второй довольно проста с помощью метода prepareForSegue и установки свойств второго контроллера с помощью segue.destinationViewController.

Я должен передать данные со второго контроллера на предыдущий. Я гуглил, но я не нашел ни одного простого, но работающего кода для его демонстрации.

Не могли бы вы дать мне простой пример, как лучше всего это сделать?

Заранее спасибо!

Ответы [ 4 ]

24 голосов
/ 03 января 2012

Во втором классе контроллера представления вы создаете протокол и делегируете.Первый контроллер представления устанавливает себя как делегата в prepareForSegue и реализует методы протокола.Затем второй контроллер представления вызовет методы для передачи данных обратно в первый контроллер представления.Вот пример кода из одного из моих проектов в качестве примера.

@protocol TableSelectorDelegate <NSObject>

@optional
- (void)didMakeSelection:(id)selectionString forType:(NSString *)dataTitle;
- (void)didAddNewValue:(NSString *)newValue forType:(NSString *)dataTitle;

@end

@interface TableSelectorViewController : UITableViewController  

@property (nonatomic, weak) id<TableSelectorDelegate> delegate;

@end
3 голосов
/ 03 января 2012

когда вы устанавливаете данные, передаваемые на второй контроллер, вы также можете установить указатель на предыдущий.

2 голосов
/ 03 января 2012

«Рекомендуемый» способ сделать это - использовать делегата. Пусть первый контроллер представления устанавливает себя в качестве делегата нового контроллера представления во время вызова -prepareForSegue:, затем, когда вы закончите, вы вызываете любые методы делегата, которые вы определили.

Это немного больше работы, чем плотное соединение двух контроллеров, но на самом деле это экономит время, если вам когда-нибудь понадобится использовать контроллер немного по-другому. Если вы смотрите видео WWDC'11 об использовании IB и раскадровок, они на самом деле подробно изучают этот шаблон и включают примеры кода и демонстрации, поэтому я рекомендую взглянуть на это.

0 голосов
/ 20 июня 2012

Я изучил все варианты этого вопроса о том, как передавать данные с одного контроллера представления на другой, и узнал, что во Втором учебном руководстве по Apple для iOS есть не только код, но и прекрасное объяснение всего, что с этим связано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...