Я создал приложение с модальным представлением, что я могу отобразить и затем отклонить. Существует ли простой способ знать, когда модальное представление было отклонено? Я хотел бы перезагрузить данные в таблице, как только модальное представление было отклонено и не знает лучший способ сделать это.
Спасибо
UIViewController имеет свойство под названием parentViewController
. В случае, когда контроллер представления представлен модально, свойство parentViewController
указывает на контроллер представления, который представил контроллер модального представления.
В вашем контроллере модального представления в viewWillDisappear:
вы можете отправить сообщение parentViewController
, чтобы выполнить любое действие, которое вы хотите, по существу.
Что-то вроде:
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.parentViewController doSomething];
}
Если ваш родительский контроллер представления является контроллером табличного представления, тогда вы должны иметь возможность вызвать [self.parentViewController.tableView reloadData];
, чтобы делать то, что вы пытаетесь достигать.
Рекомендуемый способ сделать это - использовать делегата от вашего модального контроллера представления обратно к контроллеру представления, открывшему представление. Примеры можно найти в официальной документации.
Причина, по которой это рекомендуемый способ, заключается в том, что ViewController, который изначально запустил модальное окно, также будет контролировать его отклонение.
Это действительно просто сделать и подумать более элегантно, чем использование viewWillDisappear - поскольку есть и другие причины, по которым представление может исчезнуть!
создайте протокол на вашем модальном ViewController - xViewControllerDelegate
@protocol xViewControllerDelegate
- (void) modalDialogFinished;
@end
Затем заставьте родительский элемент реализовать делегат, используя
, когда вы определяете родительский контроллер представления.
Вы будете вынуждены иметь метод под названием modalDialogFinished в родительском контроллере представления, который может обрабатывать команду удаления, обновление и т. Д.
Не забудьте передать id
в модальное представление в свой код инициализации и сохраните его как поле объекта.
Если вы хотите отклонить модальное представление, вам просто нужно сослаться на delegate.modalDialogFinished.
Если это не имеет смысла, я могу указать вам на лучший пример кода - но я надеюсь, что использование делегатов для вас не новость.
UPDATE ::
Вот официальная документация Apple о том, как это сделать для модального контроллера представления: