Подтвердить что ты не робот

IOS - переменная pushViewController vs presentModalViewController

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

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

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

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

4b9b3361

Ответ 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/