Я наконец разобрался со всеми морщинами в этом сегодня, и это проще, чем выше.
Текст кнопки «Назад» дочернего элемента основан на значениях, заданных в его родительском элементе. Это очевидное поведение, если подумать: если к контроллеру представления можно обратиться от двух родителей, текст кнопки «Назад» должен зависеть от того, кто его нажал.
Если текст всегда один и тот же:
- Выберите в редакторе родительского контроллера Элемент навигации в редакторе.
- Поместить текст в значение Кнопка Назад .
И вот так все готово. Когда этот контроллер представления отодвигается в сторону новым контроллером представления, этот новый контроллер представления получит этот текст в качестве заголовка.
Если текст динамический:
- Выберите в редакторе элемент навигации родительского контроллера в редакторе.
- Поместите некоторые текст в значение Back .
- Установите заголовок, когда он должен измениться в parent view controller:
self.navigationItem.backBarButtonItem.title = dynamicText;
И снова все готово.
Для ясности, вы можете установить это в любое время в родительском контроллере представления. Отображается только при нажатии на другой контроллер вида.
Если вы не поместите текст в кнопку Back в конструкторе, процесс создания экземпляра контроллера представления не создаст self.navigationItem.backBarButtonItem
, и вы не сможете установить заголовок nil
объект. Я полагаю, что именно отсюда и возникает путаница вокруг этого.
Конечно, вы можете создать это во время выполнения, но если вы уже выполняете большую часть своей работы в раскадровке / кончике, проще позволить декодеру сделать это за вас.
Если вам более интересно это, я просто написал пост в блоге на эту тему. У него есть больше деталей .