Как я могу отклонить два модальных контроллера представления подряд * с анимацией *? - PullRequest
11 голосов
/ 19 июля 2011

Да, я знаю, что есть точно такой же вопрос, но я хочу сделать это с двойной анимацией отклонения. Как отклонить 2 контроллера модального вида подряд?

мой код такой же, как и вопрос выше,

контроллер вида A (в контроллере навигации) - контроллер модального вида B -контроллер модального представления C

вот псевдокод

notification to B (as delegate)      // I changed order of this two lines, 
dismiss C *without* animation    // but it was same. 

(notification from C, in B)
dismiss B *with* animation

Если я использую анимацию, когда я отклоняю C, она не работает, B не будет отклоняться, потому что проигрывается анимация C,

Проблема в том, что я не могу запустить другую анимацию, если воспроизводится анимация.

Могу ли я воспроизвести анимацию отклонения подряд?

Это не только проблема отмены анимации, она также может применяться к другим анимациям iOS.

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

Small Talk: в моей программе

  • A: просмотр списка статей
  • B: просмотр записи статьи
  • C: просмотр входа в систему (если пользователь не вошел в систему)

сегодня я должен добавить представление присоединения, я должен отклонить 3 просмотра вовремя, лол, как я могу помочь этому?

Ответы [ 7 ]

23 голосов
/ 05 марта 2013

iOS 5.0 и выше:

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

Это работает, если у вас есть:

A - starting view controller
M1 - modally presented by A
M2 - modally presented by M1

Поместите эту строку кода в класс контроллера представления M2 (икнопка или что-то еще, чтобы активировать ее), и она «протянет руку» через иерархию и скажет A: dismissViewControllerAnimated:...

Однако ответ Рахула Вьяса, вероятно, является лучшим подходом для случаев, когда у вас есть неизвестное числоконтроллеров модального вида, растянутых между "A" и последним модальным видом.

7 голосов
/ 19 июля 2011

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

0 голосов
/ 18 марта 2018

Вот то, что сработало у меня, у меня было A-> B, а затем контейнерное представление «C» над B. Затем я хотел, чтобы C вернул обратно к A,

Лучший способ, который работалдля меня это называлось моим действием ввиду C

self.presentingViewController?.dismiss(animated: true, completion: {})
self.presentingViewController?.presentingViewController?.dismiss(animated: true, completion: {})

Это отклонило Модал C, затем отклонило B в синхронном порядке.Работало лучше с ощущением моего приложения

0 голосов
/ 30 мая 2012

[self dismissModalViewControllerAnimated:(BOOL)] не работает.Вторая анимация не срабатывает.В iOS 5 вы можете использовать [self dismissViewControllerAnimated:YES completion:^{}];, но это не обратно совместимо с 4.0.Я только успешно вызвал метод делегата, который закрывает модальный контроллер представления перед представлением нового.

0 голосов
/ 08 ноября 2011

Вы можете удалить 2 вида, используя

[AviewController dismissModalViewControllerAnimated:YES];

Здесь AviewController является объектом A. Надеюсь, это поможет вам.

0 голосов
/ 15 сентября 2011

Я сталкивался с подобными проблемами, пытаясь заставить анимацию работать последовательно.Я имел в виду попробовать следующее:

что, если вы поместите вызов для второй анимации (то есть, чтобы уменьшить B) внутри вызова executeSelectorOnMainThread?Это заставило бы меня думать, что вторая анимация будет вынуждена ждать завершения первой.

Хотя я еще не тестировал ее.Удачи - мне очень интересно, какое решение вы придумали.

0 голосов
/ 19 июля 2011

Вы можете использовать [self dismissModalViewControllerAnimated: (BOOL)], если хотите, чтобы представление отклоняло модальное представление. Если вы вызываете это в обоих контроллерах, это должно работать. Я сам не пробовал, но это кажется логичным.

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

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