Когда я должен использовать навигационный контроллер?

Я не знаю, когда я должен использовать навигационный контроллер вместо использования segue с обычным View Controller? И если использовать segue, который отличается между Modal и Push segue?

Можете ли вы привести мне пример?

Ответ 1

Краткий ответ: используйте контроллер навигации с "показом" segues только для реализации поведения DRILL DOWN.

Например, навигационный контроллер → Авторы → Книги → Книги

  • Для каждого уровня ниже "root" (Авторы) контроллер навигации автоматически добавляет строку заголовка и кнопку "Назад". Итак, в разделе "Книги" кнопка "Назад" автоматически называется "<Авторы".

  • Контроллеры дочернего представления должны быть подключены с помощью SHOW segues - show segues сообщают диспетчеру навигации "это отношение родитель-потомок" и вызывают ожидаемый переход в режиме "вправо-вправо". (Чтобы перепрыгнуть за пределы иерархии, например, Книги → Вход, используйте вместо этого modal segue.)

  • Корневой контроллер просмотра имеет панель навигации, в которую вы можете добавить больше кнопок на панели, но дочерние контроллеры просмотра этого не делают, поскольку они автоматически добавляются.

Пример FoodTracker

Теперь объясняется нечетное представление учебника FoodTracker в Apple Start Developing iOS Apps (Swift). ** Что происходит с этим вторым вложенным контроллером навигации? Это просто простой список блюд: нажмите на еду, чтобы показать ее в Деталь блюдо, или нажмите "Добавить в" и "Деталь еды" станет "Добавить муку".

Раскадровка продуктов питания

  • Первый контроллер навигации делает My Meals корнем иерархии сверления для любого количества просмотров, "оттолкнутых" оттуда (больше не нужны контроллеры навигации для этого).

  • Но, Деталь еды используется как для показа существующей еды и добавления нового приема пищи. Чтобы добавить новый прием, нужны кнопки "Отменить" и "Сохранить". Второй контроллер навигации позволяет добавлять эти кнопки (см. 3-е место выше), создавая файл питания "Корень".

  • Отображение существующей еды - это толкающий сегмент, но добавление еды - это модальный переход (новая еда не разворачивается). Это важно: причина, по которой Add Meal не может быть просто нажата, заключается в том, что автоматическая кнопка возврата ("<My Meals") становится двусмысленной: она сохраняет или отменяет?

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

(Это старый вопрос, но я тоже был смущен этим как iOS n00b и, как OP, у меня все еще были вопросы.)

Ответ 2

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

Контроллер навигации помогает пользователю запоминать, где они находятся в каждый момент, и как они могут вернуться, но не могут быть лучше всего использовать, если у вас слишком много уровней... И что более важно, если вы используете NavigationController или TabBarController, у вас есть класс, доступный из всех других ViewControllers, где вы можете иметь общую функциональность или данные...

Разница между модальными и push-сегментами заключается в том, что в первом случае вы всегда вернетесь к родительскому ViewController, потому что вы показываете только новую информацию сверху, а в толкающем вы заменяете один ViewController другим...

Ответ 3

Вы используете навигационные контроллеры, если хотите включить функциональность кнопки "Назад". Вы по-прежнему используете "обычные" контроллеры представлений, вы просто внедряете их в контроллер навигации. Затем вы можете нажать контроллеры просмотра и вернуться назад.