Ссылка на контроллер основного вида ... нужен код - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть приложение на основе представления (не на основе навигации и не на основе вкладок ...)

Мой основной контроллер представления вызывается из делегата приложения и инициируется из XIB.

Затем я используюpresentModalViewController для вывода другого экрана на экран с собственным контроллером xib и view.

У меня нет проблем с передачей данных этому контроллеру представления.

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

Я немного боролся с этим и нашел предложения в Интернете, но я просто не могу заставить его работать,Я надеюсь, что кто-то может предоставить пример кода для этого.

Ps это «контроллер основного вида», все еще называемый «контроллер корневого представления», или этот термин используется только при работе с контроллером представлениястек (т.е. контроллер навигации или представления вкладок)

РЕДАКТИРОВАТЬ: Я уверен, что решение Брайана будет работать, поэтому я принял в качестве ответа.Однако в итоге я использовал NSNotificationCenter, чтобы заставить это работать, и я считаю, что это немного проще для новичка

1 Ответ

2 голосов
/ 11 ноября 2011

Вы можете использовать шаблон делегирования.В заголовочном файле контроллера модального представления создайте интерфейс для нового протокола делегата ...

@protocol ModalViewControllerDelegate <NSObject>

- (void)sendData:(Data *)someData;

@end

... и дайте вашей ModalViewController новую переменную экземпляра, которая реализует этот протокол:

@property (nonatomic, assign) id<ModalViewControllerDelegate> delegate;

Ваш контроллер основного вида должен реализовать этот протокол ...

@interface MainViewController : UIViewController <ModalViewControllerDelegate> {

... и установить себя в качестве делегата, прежде чем он представит контроллер модального представления:

ModalViewController *modalViewController = [[[ModalViewController alloc] init] autorelease];
[modalViewController setDelegate:self];
// Present modal view controller

Контроллер основного представления должен реализовывать метод протокола делегата:

- (void)sendData:(Data *)someData {
    NSLog("I have just received some data: %@", someData);
}

Затем внутри вашего контроллера модального представления вы можете просто вызывать следующий метод всякий раз, когда хотите отправить данные обратно в контроллер основного представления:

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