Увольнение нескольких контроллеров представления в iOS 5 - PullRequest
3 голосов
/ 10 января 2012

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

[[[[self parentViewController] parentViewController] parentViewController] dismissModalViewControllerAnimated:YES];

Однако в iOS 5 этот метод больше не работает. Кто-нибудь знает, как добиться этого результата в iOS 5?

Ответы [ 3 ]

10 голосов
/ 12 октября 2012

Если вы вызовите dismissViewControllerAnimated: на контроллере представления, который представил первый модальный режим, вы одновременно отклоните оба модальных режима. Итак, во втором модале вы должны сделать следующее:

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:NULL];
8 голосов
/ 10 января 2012

У меня есть приложение, которое закрывает вложенные контроллеры модального представления через NSNotificationCenter. Уведомление получено от VC, к которому я хочу вернуться, и все VC пропали.

В более глубоких ВК ...

NSNotification * notification = [NSNotification notificationWithName:@"BACKTOINDEXNOTE" object:nil];
[[NSNotificationCenter defaultCenter] postNotification:notification];

В ВК я бы хотел вернуться к

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
   if (self) {
       [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismiss) name:@"BACKTOINDEXNOTE" object:nil];

       // more init code
   }
   return self;
}

-(void)dismiss
{
  [self dismissModalViewControllerAnimated:YES];
}

Это работает на устройстве iOS 5 с проектом, развернутым для 4.0+ Я надеюсь, что это помогает. Если вы используете это, он будет масштабироваться для поддержки большего количества VC между вашим текущим VC и тем, к которому вы хотите отказать, без изменения этого кода

0 голосов
/ 30 сентября 2013

Чтобы получить стек из двух модалов, вызовите этого ребенка из вашего метода делегата на начальном презентаторе, чтобы спрыгнуть вниз по стеку и сбросить ядерные бомбы на представленные ВК.

[self.presentedViewController.presentedViewController dismissViewControllerAnimated:NO completion:nil];
[self.presentedViewController dismissViewControllerAnimated:YES completion:nil];

Очевидно, что это немного хрупко, потому что если вы начнете добавлять больше модалов, то все сломается. Как правило, если вы работаете со стеком контроллеров, вы должны использовать UINavigationController, но для пары модалов это работает и намного менее сложно, чем настройка уведомлений или даже больше делегатов!

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