2015-01-23 3 views
0

Я искал решение для этого в течение довольно долгого времени, но я до сих пор не вижу, что самое лучшее решение: Я пытаюсь программным образом переключаться на контроллеры представлений, без чего-либо в раскадровке, файлы.Изменение ViewController программно

Насколько я вижу presentViewController() просто создает «модальный», который приведет к предыдущим ViewController, чтобы остаться в памяти (проверено на это, deinit никогда не срабатывает для первого контроллера). Решение, которое я нашел, заключается в том, чтобы переключить rootViewController: self.view.window?.rootViewController = ViewController2() -> это огонь deinit первого.

Хотя это решение будет работать в теории, я задаюсь вопрос ...

  1. Есть некоторые рекомендуемый способ или лучшая практика, как это сделать программно? Или это действительно просто изменение значения viewRootController?
  2. Как вы структурируете свое приложение? Используете ли вы один ViewController и вы меняете представления? Или вы представляете другие ViewControllers как модалы с помощью currentViewController? (Я совершенно не знаком с этим, и я не могу найти хороший источник, большинство статей касаются раскадровки)

Спасибо большое!

EDIT: добавлю: у моего тестового приложения не должно быть какой-либо навигации для разных диспетчеров просмотра (никаких вкладок и ничего подобного). Он в основном работает как screen1-> screen2-> screen3-> screen4. Если нажать кнопку сброса, она вернется к экрану1. Я просто заинтересован в замене ViewControllers, больше ничего.

+0

Это действительно зависит от того, как вы хотите структурировать навигацию в своем приложении. – Paulw11

ответ

0

1: Изменение контроллера корневого окна главного окна является правильным для подстановки диспетчеров отображения.

2: Как правило, коммутационный контроллер просмотра не используется. Вы можете использовать контроллер навигации с контроллером корневого представления (например, ваш главный экран), а затем при необходимости использовать другие контроллеры представлений. Также очень полезны контроллеры просмотра панели. https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/CombiningViewControllers.html#//apple_ref/doc/uid/TP40011313-CH6-SW1

Надеюсь, это поможет!

0

1. Основные пути являются:

navigationController?.popViewControllerAnimated(true) 

или просто выскочить к корневому зрения

navigationController?.popToRootViewControllerAnimated(true) 

толкания можно сделать так же

заходящего или новый стек

navigationController?.setViewControllers([viewController], animated: true) 

Это рекомендуемые способы навигации в коде, просто выберите тот, который соответствует вашей конкретной ситуации.

Механизм push и pop, вероятно, является наиболее рекомендуемым способом общей навигации.

  1. Старайтесь всегда использовать навигационные контроллеры и использовать только модальные виды.

Используйте навигационные контроллеры при навигации по основным видам. Модальные виды могут использоваться как виды сбоку или расширения для представления, представляющего это представление в моделях.

Редактировать: Существует множество способов эффективной навигации по приложению. В этом конкретном случае толчок и выталкивание навигационного стека, вероятно, лучший путь. Но имейте в виду, что есть контроллеры панели Tab, коллекции и другие. В конце дня Лучше всего посмотреть на структуру вашего приложения и на основе этого решить, какой метод навигации является лучшим для вас.

+0

Так вы можете использовать навигационный контроллер, но есть много способов структурирования приложения без контроллера навигации. – Paulw11

+0

Есть, я сожалею Я не рассматривал их всех, но он попросил рекомендации. Контроллеры навигации - это стандартное яблоко, рекомендующее делать большую навигацию, я чувствую, что голосование было ненужным. – Bennie

+0

Вопрос слишком широк. Да, навигационные контроллеры - это рекомендуемый способ навигации, но на самом деле это точка 2, с которой я столкнулся. Я думаю, вы хотите избежать модальной презентации, если это необходимо, достаточно справедливо, но неправильно говорить «всегда использовать навигационные контроллеры». Существуют счетчики контуров, виды коллекций, любое количество способов представления контроллеров представлений. Даже изменение контроллера корневого представления в норме – Paulw11

Смежные вопросы