IOS - переменная pushViewController vs presentModalViewController
В чем разница между вызовами presentModalViewController
и pushViewController
, когда:
- анимация установлена в НЕТ (даже если да, это просто стиль анимации, который можно изменить).
- навигационный контроллер определяется при представлении модального представления, поэтому он также может быть навигационным, со стек вызовов,....
Это только возможность вернуться с первого толкаемого представления? Woooaaaaaa.....
Я думаю, что разница в другом месте и глубже. Нет?
Ответы
Ответ 1
Самое важное отличие состоит в семантике. Модальные контроллеры представлений обычно указывают, что пользователь должен предоставить некоторую информацию или что-то сделать. Эта ссылка объясняет это более подробно: http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/ModalViewControllers/ModalViewControllers.html
Здесь другая, менее абстрактная разница, о которой они говорят:
"Когда вы представляете контроллер модального представления, система создает отношения между родителями и дочерними элементами между контроллером представления, который представлял презентацию и контроллер представления, который был представлен. В частности, контроллер представления, который выполнил презентацию, обновил свое свойство modalViewController до указывают на его представленный (дочерний) контроллер представления. Аналогично, представленный контроллер представления обновляет свойство parentViewController, чтобы вернуться к контроллеру представления, который его представил.
Также смотрите эту тему: почему "нынешний контроллер модального просмотра" ,
Ответ 2
Игнорируя переходы/анимации и то, как вещи структурированы за кулисами (что хорошо описывает обсуждение aleph_null alswer), единственной отличительной особенностью пользователя является возможность автоматически вернуться к предыдущему виду с помощью панели навигации.
Если вы используете pushViewController
, вы автоматически получите кнопку "Назад" на панели навигации. Если вы используете presentModalViewController
, вы этого не сделаете, и обычно вам придется реализовать свои собственные элементы управления и/или обратные вызовы, чтобы справиться с увольнением контроллера.
Концептуально стиль модальной презентации обычно используется для атомных задач, от которых вы не можете перемещаться (например, вы либо выполняете задачу, либо отменяете ее, и вы не можете делать что-либо еще в приложении до тех пор, пока не сделаете то или другое).
Если вам интересно, почему разница в первом месте, я не могу сказать. Лично я считаю, что рамки, которые предоставляют единый API для перехода от одного контроллера к другому (например, cocos2d или Android), имеют больший смысл.
Ответ 3
Это то, что мой опыт говорит, если вы хотите управлять иерархией представлений, лучше перейдите для pushViewController в контроллер навигации. Он работает как стек контроллеров view в контроллере навигации. Если, однако, требование состоит только в том, чтобы показать представление о выполнении некоторых действий на родительском контроллере представления, тогда лучший способ представляет его модально.
Если вам нужна сложная поп-логика, всегда предпочитайте pushViewController.
Ответ 4
Взгляните на просмотрКонтроллеры на изображении
- Верхние 2 viewControllers (вход и отправка) в левом верхнем углу отключены от tabBarController и NavigationController
- Остальная часть viewControllers встроена в NavigationController. Они как-то принадлежат естественному потоку приложения.
Теперь вы должны спросить себя
Нужно ли всегда показывать логин + отправить страницу каждый раз? Было бы болью в шее, чтобы пользователь каждый раз заходил на логин, даже если они вошли в последний раз. Эти 2 экрана действительно не соответствуют естественному потоку экранов. Так что же нам делать? Мы просто добавляем их с помощью presentViewController
Однако для остальной части viewControllers мы хотим сохранить их внутри 2 навигации, чтобы мы могли легко вернуться туда и обратно, поэтому мы используем pushViewController
![введите описание изображения здесь]()
Для получения дополнительной информации я рекомендую вам просмотреть этот видео
Изображение было также выбрано из этого отличного ответа. Это достойно взгляда.
Ответ 5
UINavigationController используется, когда вы хотите иметь какое-то иерархическое представление ваших данных (например, разверните). Они работают с использованием стека подклассов UIViewController. Каждый раз, когда вы "сверляете", вы просто добавляете в стек еще один контроллер представления. Затем логика "назад" - это просто вопрос выключения диспетчеров представлений из стека.
Вы можете проверить эту ссылку:
http://www.icodeblog.com/2011/10/11/back-to-basics-an-introduction-to-view-controllers/