Кнопка «Назад» UINavigationController
по умолчанию показывает заголовок последнего представления в стеке. Есть ли способ иметь собственный текст вместо кнопки «Назад»?
ios
iphone
uinavigationcontroller
Али шафаи
источник
источник
self.navigationController.navigationBar.topItem.title = @"Custom text";
Ответы:
По этой ссылке :
Как сказал Тайлер в комментариях:
источник
release
UIBarButtonItem
UIBarButtonItemStyleBordered
на звонок в собственностьself.navigationItem.backBarButtonItem.style
. Документация: developer.apple.com/library/ios/documentation/uikit/reference/…Вы можете установить текст в Интерфейсном Разработчике:
Выберите элемент навигации ViewController, к которому вернется кнопка «Назад»:
В инспекторе атрибутов панели утилит введите свой ярлык для кнопки «Назад»:
Я предпочел бы этот подход, чем устанавливать заголовок в коде, как в принятом ответе.
источник
Я использую это:
источник
Я нашел удобное решение для этого, просто установив заголовок контроллера перед тем, как поместить другой контроллер в стек, например:
Затем убедитесь, что оригинальное название установлено
viewWillAppear
так:Это работает, потому что по умолчанию
UINavigationController
при создании кнопки «Назад» во время операции нажатия используется заголовок предыдущего контроллера.источник
Название кнопки «Назад» по умолчанию соответствует заголовку предыдущего представления, поэтому я использую быстрый прием, чтобы поместить следующий код в файл .m предыдущего представления.
источник
в вашем методе init добавьте следующий код:
затем добавьте простой метод, чтобы разрешить отклонение viewcontroller:
источник
Добавьте следующий код в viewDidLoad или loadView
Я проверил это в iPhone и iPad с iOS 9
источник
navigationController
иtopItem
свойств, например:self.navigationController?.navigationBar.topItem?.title = "Custom Text"
Добавление к ответу повести. Обратите внимание на документы Apple, что объявление backBarButtonItem таково:
Поэтому ответ Rein утечет память, потому что синтезированный сеттер будет
retain
экземпляр, который вы передаете ему, который никогда не освобождается явно. Вы можете исправить это с помощьюautorelease
Или вы можете указать переменную в экземпляре, чтобы вы могли явно освободить ее позже:
Надеюсь это поможет!
источник
источник
Я обнаружил что-то интересное. Если вы наследуете метод
UINavigationController
и переопределяетеpushViewController:animated:
метод и делаете что-то вроде этого: (имейте в виду, что я использую ARC)Тогда для всех,
ViewControllers
что нажимается вашим навигационным контроллером, будет автоматически нажата кнопка «Назад». Если вы хотите изменить текст для определенных контроллеров представления, вы можете попробовать и, возможно, привести viewcontroller к определенному классу или вашему собственному пользовательскому протоколу (который наследует ваш viewcontroller, от которого может быть подобный методbackButtonText
или что-то глупое), который может дать вам определенная информация о контроллере представления, которая поступает так, что вы можете настроить для нее текст кнопки «назад». Теперь текст кнопки «Назад» обрабатывается в месте, которое должно нести ответственность. Я должен признать, что создание новой кнопки для изменения текста отстой, ну да ладно.Может кто-нибудь придумать причину, почему бы не сделать это так? По крайней мере, вам не нужно возиться с названиями viewcontroller или не забывать создавать новую кнопку назад, прежде чем нажимать viewcontroller на контроллере навигации.
источник
Ответ Рейна работает хорошо.
Обратите внимание, что если вы нажмете более одного контроллера вида, для каждого из них появится измененный заголовок кнопки «Назад», который может не соответствовать вашему желанию.
В этом случае вам нужно будет создавать пользовательский UIBarButtonItem каждый раз, когда вы нажимаете контроллер представления.
Кроме того, убедитесь, что вы делаете это, прежде чем нажимать контроллер представления, в противном случае вы получите сбой экрана при изменении названия.
источник
Разобравшись с предложением Обри, вы можете сделать это в контроллере дочернего представления:
создать две переменные для хранения старых значений родительского файла navigationItem.title и родительского элемента навигации
в
viewDidLoad
добавьте следующее:в
viewWillDisappear
добавьте следующее:Это не идеально. Вы увидите, как изменяется название родительского представления, когда новый контроллер анимирован. НО это действительно позволяет создать специальную метку для кнопки «Назад» и сохранить ее форму в виде стандартной кнопки «Назад».
источник
Поместите это в себя
viewDidLoad
, надеюсь, это приведет к тому, что вы ищетеисточник
если вы хотите установить заголовок в контроллере ARRIVING (иногда больше логики ..) в swift 3, сделайте:
в следующем контроллере:
обычно я помещаю self.setBackButtonNavBar в расширение контроллера.
источник
Я знаю, что это старый вопрос, и ответы вроде как обновлены!
Самый простой способ сделать это в родительском ViewController:
то есть тот, который приведет вас к следующему представлению контроллера.
источник
Делая это в коде, удалите стиль кнопки «Назад»
UINavigationConroller
. Если вы добавляете элемент навигации в каждое из ваших представлений, вы можете установить заголовок задней кнопки вStoryBoard
.источник