Как получить уведомление об исчезновении листа формы (UIModalPresentationFormSheet)? - PullRequest
4 голосов
/ 27 апреля 2011

У меня есть контроллер представления (A), который представляет другой контроллер представления (B) модально в виде листа формы (UIModalPresentationFormSheet).

Теперь я хочу отклонить контроллер представления B и представить другой, как только онсделать это безопасно (потому что вы не можете использовать presentModalViewController:, когда другой контроллер представления показывается или отклоняется.)

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

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

Как вы, несомненно, заметили, старые методы viewDidAppear не запускаются, когда контроллер UIModalPresentationFormSheet отключается.Можно эмулировать вызов viewWillAppear, просто вызывая этот метод, когда вы отключаете контроллер, но это не то, что вам нужно.

Вместо того, чтобы представлять второй модальный контроллер представления, вы можете передать новый viewController в существующиймодальный вид контроллера навигацияКонтроллер?В любом случае, это может дать более приятный пользовательский опыт.

Или вы можете использовать поповер?

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

Итак, вот что мы сделали.

Поскольку контроллер представления, управляющий листом формы (B) , получает get -viewDidDisappear, мы просто добавляем контроллер представления (A) в качестве делегата, который мы затем уведомляем вручную, когда -viewDidDisappear вызывается на (B) контроллере представления.

Определение делегата выглядит так:

@protocol FormSheetViewControllerDelegate
- (void)formSheetViewDidDisappear;
@end

Мы добавляем делегата в FormSheetViewController:

@interface FormSheetViewController

@property (nonatomic, assign) id <FormSheetViewControllerDelegate>

@end

И мы вызываем -formSheetViewDidDisappear из FormSheetViewController:

@implementation FormSheetViewController

- (void)viewDidDisappear:(BOOL)animated {
    [registerViewControllerDelegate registerViewControllerDidDisappear];
}

@end

P.S:. Начиная с iOS 5 и блоков, UIViewController имеет метод

- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
Которые вы могли бы использовать, чтобы отреагировать на отклонение представления листа формы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...