iOS-pushViewController против presentModalViewController разница

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

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

Это просто, чтобы иметь возможность вернуться от первого нажатого вида ? Woooaaaaaa.....

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

5 ответов


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

вот еще одно, менее абстрактное различие, о котором они говорят:

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

Также см. Эту тему: почему " присутствует модальный вид контролер"?


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

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

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

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


взгляните на viewControllers в изображении

  • верхние 2 viewControllers (login & submit) в левом верхнем углу -отключен С tabBarController & NavigationController
  • остальные viewControllers встроены в NavigationController. Они каким-то образом принадлежат естественному потоку приложения.

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

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

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

enter image description here

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


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


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

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