Метод, когда модальное представление отклонено
Я создал приложение с модальным представлением, которое я могу отобразить, а затем уволить. Есть ли простой способ узнать, когда модальное представление было отклонено? Я хотел бы перезагрузить данные в таблице после того, как модальное представление было уволено и не знает, как это сделать.
Спасибо
Ответы
Ответ 1
UIViewController имеет свойство parentViewController
. В случае, когда контроллер представления представлен модально, свойство parentViewController
указывает на контроллер вида, который представил контроллер модального представления.
В вашем модульном контроллере просмотра в viewWillDisappear:
вы можете отправить сообщение в parentViewController
для выполнения любого действия, которое вы хотите, по существу.
Что-то вроде:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.parentViewController doSomething];
}
Если ваш родительский контроллер представления является контроллером табличного представления, вы можете позвонить [self.parentViewController.tableView reloadData];
, чтобы выполнить то, что вы пытаетесь достичь.
Ответ 2
Рекомендуемым способом сделать это будет использование делегата из вашего модального контроллера представления обратно на контроллер вида, который открыл представление. Ознакомьтесь с официальными документами для примера.
Причина, по которой это рекомендуется, заключается в том, что ViewController, который первоначально начал использовать модальный, также будет контролировать отклонение его.
Это действительно просто сделать и думать более элегантно, чем использовать viewWillDisappear - поскольку есть другие причины, по которым вид может исчезнуть!
создать протокол на вашем модальном ViewController - xViewControllerDelegate
@protocol xViewControllerDelegate
- (void) modalDialogFinished;
@end
Затем сделайте, чтобы ваш родитель реализовал делегат, используя <xViewControllerDelegate>
, когда вы определяете свой родительский контроллер представления.
Вы будете вынуждены иметь метод modalDialogFinished в своем родительском контроллере представления - который может обрабатывать команду отклонения и обновление и т.д.
Не забудьте передать id<xViewControllerDelegate>
в контроллер модального просмотра в коде инициализации и сохранить его как поле на объекте.
Если вы хотите отказаться от своего модального представления, вам просто нужно указать делегат .modalDialogFinished.
Если это не имеет смысла, я могу указать вам на лучший код примера, но я надеюсь, что использование делегатов для вас не нова.
UPDATE::
Вот официальная документация Apple о том, как это сделать для модального контроллера:
http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html