Как я могу вызвать модальный контроллер вида под другим? - PullRequest
3 голосов
/ 23 ноября 2011

У меня проблема с навигацией.Я хочу создать следующую структуру навигации:

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

Моя самая большая проблема заключается в том, что я не могу найти способ отобразить диалоговые окна модели C или D за B, прежде чем он будет закрыти до тех пор, пока что-то не произойдет в B, я не знаю, должен ли я создавать C или D, поэтому я не могу начать B с C для начала.Кроме того, даже если бы я мог сделать это, я не смог бы заставить анимацию работать так, как я описал в формулировке проблемы.

Есть идеи, как я мог бы заставить этот сценарий работать?

Ответы [ 3 ]

1 голос
/ 23 ноября 2011

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

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated

, который позволяет реорганизовать стек контроллера представления с анимацией или без нее.Так что, возможно, смена стека для вставки нового VC ниже верхнего (текущего) без анимации будет работать.Затем ваша кнопка «Готово» (или аналогичная) открывает верхний ВК, чтобы открыть новый под ним.

Стратегия два: это немного более экспериментально и может не сработать, но вы можете уйтис выполнением «точно в срок» вставки контроллера представления.Например, для VC A реализуйте viewWillAppear.. Этот метод обычно вызывается в самом начале анимации пользовательского интерфейса над его отклоняемым и может быть хорошим местом для вставки нового VC (т. Е. Показ мод без анимации), посколькуанимация отклонения для вышеупомянутого VC только началась.Как я уже сказал, ваш пробег может отличаться.

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

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

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

см. Apple документы

"Любой объект контроллера представления может представлять любой другой отдельный контроллер представления модально. Это верно даже для контроллеров представления, которые сами были представлены модально. Другими словами, вы можете при необходимости связывать контроллеры модального представления, представляя новые контроллеры модального представления на другие контроллеры модального представления по мере необходимости. "

Таким образом, вы можете представить NavigationControllers модально.

Однако вы не можете легко переключить корневой контроллер вида навигационного контроллера (одна возможность здесь ).

В качестве альтернативы было бы представить NavigationController модально, но с самого начала нажать на него два ViewController, чтобы пользователь увидел второй (экран B), затем вернулся к первому (экран C) и затем отклонил модальный NavigationController возвращается на экран A.

...