iOS - pushViewController против существующей разницы между ModalViewController - PullRequest
24 голосов
/ 08 ноября 2011

Какая разница между вызовами presentModalViewController и pushViewController, когда:

  • для анимации установлено значение NO (даже если да, это просто стиль анимации, который можно изменить).
  • при представлении модального вида определяется контроллер навигации, поэтому он также может быть навигации с помощью стека вызовов ....

Это просто для возможности вернуться назадс первого толкаемого взгляда?Woooaaaaaa .....

Я думаю, что разница в другом и глубже.Нет?

Ответы [ 5 ]

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

Игнорирование переходов / анимаций и того, как все устроено за кулисами (о чем alweer aleph_null дает хорошее обсуждение), единственное отличие, связанное с пользователем, заключается в возможности автоматического возврата к предыдущему виду с помощью панели навигации.

Если вы используете pushViewController, вы автоматически получите кнопку «Назад» на панели навигации.Если вы используете presentModalViewController, вы этого не делаете, и, как правило, вам придется реализовывать свои собственные элементы управления и / или обратные вызовы для обработки отклонения контроллера.

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

Если вам интересно почему Во-первых, я не могу сказать, что у меня есть разница.Лично я считаю, что фреймворки, предоставляющие единый API для перехода с одного контроллера на другой (например, cocos2d или Android), имеют гораздо больше смысла.

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

Самое важное отличие заключается в семантике. Контроллеры модального представления обычно указывают, что пользователь должен предоставить некоторую информацию или что-то сделать. Эта ссылка объясняет это более подробно: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html

Вот еще одна, менее абстрактная разница, о которой они говорят:

"Когда вы представляете модальный контроллер представления, система создает отношения родитель-потомок между контроллером представления, который сделал представление и контроллер представления, который был представлен. В частности, контроллер представления, который сделал представление, обновляет свое свойство modalViewController до указывает на представленный (дочерний) контроллер представления. Аналогично, представленный контроллер представления обновляет свое свойство parentViewController, чтобы указывать обратно на контроллер представления, который его представил. "

Также смотрите эту ветку: почему "присутствует контроллер модального вида"?

2 голосов
/ 18 сентября 2016

Посмотрите на viewControllers на изображении

  • Верхние 2 viewControllers (войти и отправить) в левом верхнем углу отключены от tabBarController & NavigationController
  • Остальные контроллеры view встроены в NavigationController. Они как-то относятся к естественному потоку приложения.

Теперь вы должны спросить себя

Нужно ли мне всегда показывать страницу входа + отправки каждый раз? Это будет боль в шее для пользователя, чтобы каждый раз заходить в систему, даже если они вошли в последний раз. Эти 2 экрана действительно не соответствуют естественному потоку экранов. Так что же нам делать? Мы просто добавляем их модально, используя presentViewController

Однако для остальных контроллеров view мы хотим, чтобы они находились внутри 2-х систем навигации, чтобы мы могли легко переходить назад и вперед , поэтому мы используем pushViewController

enter image description here

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

1 голос
/ 05 сентября 2013

Это то, что говорит мой опыт: если вы хотите управлять иерархией представлений, лучше перейдите к pushViewController в контроллере навигации. Он работает как стек контроллеров представления в контроллере навигации. Однако, если требуется просто показать представление о выполнении некоторых действий на родительском контроллере представления, тогда лучшим способом будет представление его модально. Если вам нужна сложная логика push-pop, всегда предпочитайте pushViewController.

0 голосов
/ 28 мая 2013

UINavigationController используется, когда вы хотите иметь какое-то иерархическое представление ваших данных (то есть детализацию).Они работают с использованием стека подклассов UIViewController.Каждый раз, когда вы «углубляетесь», вы просто добавляете другой контроллер представления в стек.Тогда логика «назад» - это просто вопрос выталкивания контроллеров представления из стека.

Вы можете проверить эту ссылку: http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/

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