Метод, когда модальное представление было отклонено - PullRequest
16 голосов
/ 03 февраля 2010

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

Спасибо

Ответы [ 2 ]

24 голосов
/ 03 февраля 2010

Рекомендованный способ сделать это - использовать делегата от вашего модального контроллера представления обратно в контроллер представления, который открыл представление.Ознакомьтесь с официальными документами для примеров.

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

Это действительноэто просто сделать и думать более элегантно, чем использовать viewWillDisappear - поскольку есть и другие причины, по которым представление может исчезнуть!

создать протокол на модальном ViewController - xViewControllerDelegate

@protocol xViewControllerDelegate

    - (void) modalDialogFinished;

@end

Затем сделать родителяреализуйте делегат, используя <xViewControllerDelegate> при определении вашего родительского контроллера представления.

Вы будете вынуждены иметь метод modalDialogFinished в вашем родительском контроллере представления - который может обрабатывать команду dismiss, обновление и т. д.

Не забудьте передать id<xViewControllerDelegate> в контроллер модального вида в вашем коде инициализации и сохранить его как поле на объекте.

Если вы хотите отменить свое модальное представление, тогда вам просто нужно сослатьсяthe делегат.modalDialogFinished.

Если это не такТогда я могу указать вам на лучший пример кода, но я надеюсь, что использование делегатов не ново для вас.

ОБНОВЛЕНИЕ ::

Вот официальная документация Apple о том, как это сделать.это для контроллера модального вида:

http://developer.apple.com/iphone/library/featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

21 голосов
/ 03 февраля 2010

UIViewController имеет свойство с именем parentViewController.В случае, если контроллер представления представлен модально, свойство parentViewController указывает на контроллер представления, который представил контроллер представления мод.

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

Что-то вроде:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.parentViewController doSomething];
}

Если ваш родительский контроллер представления является контроллером представления таблицы, то вы должны иметь возможность вызвать [self.parentViewController.tableView reloadData]; делать то, что вы пытаетесь достичь.

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