Автоматически добавлять кнопку «назад» на панели навигации - PullRequest
0 голосов
/ 10 апреля 2019

Прежде всего: я использую Swift 5 с Xcode 10 (iOS 12.0).

Я довольно новичок в разработке Swift / iOS и посмотрел пару видео о том, как добавить кнопку "назад" на панель навигации. Во всех них (с Swift 3) кнопка просто волшебным образом появляется после запуска приложения после добавления перехода (между элементом в первой и второй сценах) и заголовка для обеих панелей навигации.

Мое приложение имеет три ViewController / сцены:

  1. Вход без навигационной панели (кнопка «Войти»: переход к сцене 2)
  2. Просмотр таблицы (связан со сценой 3 с помощью segue, поэтому я могу просто нажать на элемент в списке)
  3. Дополнительная информация по одному элементу в табличном представлении

Для перехода между сценами 2 и 3 задано «show (например, push)», поскольку «push» устарела и приводит к сбою приложения.

Я добавил обе панели навигации в контроллеры навигации (2 и 3) вручную и хочу добавить значок стрелки на панель навигации сцены 3. Что я пробовал до сих пор:

  • Добавить заголовки для панели навигации в обеих сценах
  • Установить атрибут «Кнопка назад» (текст на панели навигации), который создал дочерний объект
  • Затем установите атрибут «Image» дочернего объекта
  • Установить атрибуты «Назад» и «Маска спины» (панель навигации) для одного и того же изображения

Хотя ничего не отображается ни в Xcode, ни в симуляторе (даже изображение).

Возможно ли даже получить автоматическую кнопку "назад" или вам теперь нужно добавить ее самому, используя элемент "Панель кнопок"?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

Отвечая на мой собственный вопрос: Да, по-прежнему (Xcode 10 / Swift 5) возможно заставить его автоматически добавлять кнопку «назад».

Push Сегсы устарели со времен iOS 8, поэтому используйте Show (e.g. Push) вместо!

Обычно Show (e.g. Push) segue использует Show, но если где-то слева NavigationController (сцены идут слева направо) текущего ViewController, он автоматически использует Push, который также добавляет кнопку «назад» к панели навигации следующей сцены или, если нет панели навигации, просто добавляет кнопку, где обычно располагается панель.

Мои сцены теперь выглядят так:

  1. ViewController1: вход в систему без панели навигации (кнопка «login»: перейти к NavigationController)
  2. NavigationController: с автоматическим переходом к новому UITableViewController (если добавлено через библиотеку)
  3. ViewController2: представление таблицы (связано с 4. с помощью segue)
  4. ViewController3: дополнительная информация для одного элемента

Добавление данных в переходы между 1. и3. (используя 2.) это ручканемного отличается от того, что было бы без NavigationController:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let navC = segue.destination as? UINavigationController
    let vc2 = navC?.viewControllers.first as! ViewController2
    vc2.myinformation = myinfosArray
}

(Bad) Альтернатива NavigationController:

Добавить NavigationBar и BarButtonItemи свяжите его с предыдущим представлением, как с любой другой кнопкой.

Недостаток: представление (в моем случае «ViewController2») сбрасывается, когда вы переключаетесь на следующее (поскольку два представления не отображаются натот же стек, см. объяснение Джали выше), поэтому, если вы вернетесь назад, вам придется все заново настроить.

0 голосов
/ 10 апреля 2019

Таким образом, когда вы show Контроллер Представления, такой как v2, v3, эти Контроллеры Представления больше не находятся в том же стеке навигации, что и ваш v1, поэтому он не показывает автоматически кнопку возврата.

Я не знаю, почему это говорит о том, что ваша функция Push устарела, но если бы вы могли сделать снимок экрана, возможно, я могу объяснить вам причину. Я использую Swift5, и я могу использовать это: self.navigationController?.pushViewController(vc, animated: true)

Чтобы ответить на ваш вопрос, если вы хотите добавить кнопку возврата в v2, v3, тогда вам НЕОБХОДИМО использовать BarButtonItem и вызвать self.dismiss(viewController, true) Я настоятельно рекомендую вам не делать этого таким образом, если вы хотите, чтобы они были в том же стеке навигации, что и ваш v1.

...