Метод вызова из Modal View Controller

У меня есть контроллер представления, который представляет модальное представление при нажатии определенной кнопки. После закрытия модального представления и повторного отображения исходного представления внизу я хочу, чтобы вызывался метод обновления. Как мне вызвать этот метод refresh: в OriginalViewController из ModalViewController?

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


person quantum    schedule 04.11.2009    source источник


Ответы (2)


Как показано в Руководстве по программированию View Controller рекомендуется использовать делегирование.

Как вы это сделаете, зависит от вас, но стандартным способом было бы определить такой протокол, как:

@protocol RecipeAddDelegate <NSObject>
- (void)modalViewControllerDismissed:(ModalViewController *)modalViewController;
@end

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

- (void)modalViewControllerDismissed:(ModalViewController *)modalViewController {
   [self refresh]; // or anything you want to do
}

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

person pgb    schedule 04.11.2009
comment
Ссылка не работает, новая ссылка: developer.apple.com/ библиотека/ios/#featuredarticles/ - person Kalle; 09.09.2010
comment
Что такое RecipeAddDelegate? Куда идут OriginalViewController и ModalViewController? У кого есть пример кода, который на самом деле ОТВЕЧАЕТ на исходный вопрос. Фактический код. - person Patricia; 16.10.2010

Ознакомьтесь с Руководством по программированию View Controller, в частности, раздел о закрытии модального представления.

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

person Ben S    schedule 04.11.2009