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

Разница между presentViewController и UINavigationController?

Скажите разницу между presentViewController и UiNavigationController? Могу ли я использовать presentViewController вместо UiNavigationController для навигации по различным представлениям в приложении? Каков сценарий для использования?

4b9b3361

Ответ 1

presentViewController предлагает механизм отображения так называемого модального контроллера вида; то есть контроллер представления, который будет полностью контролировать ваш пользовательский интерфейс, будучи наложенным поверх верхнего контроллера.

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

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

В частности, примером такого ограничения является следующее: когда вы отклоняете контроллер модального представления (чтобы "закрыть" его), все ваши представленные в режиме просмотра представления контроллеры (от одного и того же контроллера представления) также будут уволены по адресу один раз. Таким образом, вы просто не сможете реализовать функцию "вернуться" /навигации как таковой.

Итак, это зависит от того, что вы пытаетесь сделать.

Ответ 2

A UINavigationController является подклассом UIViewController, который управляет стеком диспетчеров вида и добавляет кнопку "Назад" и т.д.

presentViewController - это метод класса UIViewController, который вы используете для представления модального контроллера.

Ответ 3

UINavigationController поддерживает навигационный стек для вас. Затем вы можете перемещаться по иерархическому контенту.

http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

Если вы используете метод UIViewControllers presentViewController, вы в основном просто заменяете контроллер вида. для вас не поддерживается навигационный стек.

Ответ 4

UINavigationController - это класс, presentViewController - это метод экземпляра UIViewController (iOS 5 +), из которых UINavigationController является подклассом.

pushViewController - сопоставимый метод для представленияViewController. Это метод экземпляра UINavigationController, для iOS 2 +