Ответ 1
В viewWillAppear напишите это
self.navigationItem.title = @"List View";
И в ViewWilldisapper напишите это
self.navigationItem.title = @"Back";
Он работает без досок объявлений.
У меня есть UIViewController
, и я перехожу от своего первого контроллера представления к контроллеру второго представления, и я хочу изменить имя кнопки, показанной на navigationcontroller
, для возврата назад.
SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];
теперь во втором viewcontroller
Я хочу изменить имя кнопки в navigationcontroller
.
В viewWillAppear напишите это
self.navigationItem.title = @"List View";
И в ViewWilldisapper напишите это
self.navigationItem.title = @"Back";
Он работает без досок объявлений.
Если вы хотите сделать это программно, это можно сделать следующим образом:
UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
style:UIBarButtonItemStyleBordered
target:nil
action:nil];
[self.navigationItem setBackBarButtonItem:backItem];
let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem
Однако, если вы предпочитаете использовать Interface Builder, просто выберите UINavigationItem, для которого вы хотите установить обратную кнопку, и перейдите к инспектору атрибутов, чтобы изменить заголовок кнопки.
ПРИМЕЧАНИЕ.. Важно помнить, что вы должны настроить это на контроллере представления, к которому вы бы возвращались, нажав кнопку "Назад", а не на текущий вид контроллера вида.
В интерфейсе Builder или Storyboarding есть простой способ сделать это. В родительском контроллере View просто установите атрибут "Back Button" элемента навигации на любой желаемый заголовок. Вот пример:
Виллианский таверн View будет иметь "Назад" в качестве заголовка Back Button, как мы только установили в инспекторе атрибутов родительского навигационного контроллера (Best Bars).
В моем случае он работал только с кодом на основном потоке, например:
dispatch_async(dispatch_get_main_queue(), ^(void) {
self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
Swift 3:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let backItem = UIBarButtonItem()
backItem.title = "Back"
navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}
Примечание. Кнопка "Назад" относится к предыдущему диспетчеру просмотра, а не к изображаемому на экране. Чтобы изменить кнопку "Назад", вы должны обновить ее перед нажатием, на контроллере представления, который инициировал сеанс:
В Swift я нашел очень простое решение,
Предположим, я нахожусь на ViewControllerA и иду к ViewControllerB. Если я хочу изменить имя кнопки "Назад", отображаемой на ViewControllerB, я сделаю это в ViewControllerA,
self.title = "BackButtonTitle"
Это.
Примечание: - Это изменит заголовок ViewControllerA
Очень важно, чтобы опция "Имитированные показатели" не была выбрана как "Inferred".
Я пробовал с "Нет" и все правильно!
Попробуйте следующее: -
NSArray *viewControllerArr = [self.navigationController viewControllers];
// get index of the previous ViewContoller
long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1;
UIViewController *previous;
if (previousViewControllerIndex >= 0) {
previous = [viewControllerArr objectAtIndex:previousViewControllerIndex];
previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStylePlain
target:self
action:nil];
}
На самом деле, вы можете изменить название кнопки назад:
self.navigationItem.backBarButtonItem.title = @"NewName";
Если вы используете ссылки Storyboard, контроллер View может не отображать элемент навигации в построителе интерфейса.
Ручная перетаскивание панели навигации не будет работать, вам нужно перетащить Элемент навигации
Затем вы сможете установить заголовок своей кнопки. Здесь также указывается название представления.
Цитата: Mick MacCallum:
ПРИМЕЧАНИЕ.. Важно помнить, что вы должны настроить это на контроллере представления, к которому вы бы возвращались, нажав кнопку "Назад", а не на текущий вид контроллера вида.
Вы можете достичь этого, используя titleView
navigationItem
Свифт 3 Ответ
• Создайте одно расширение для UINavigationItem
как ниже
extension UINavigationItem {
func customTitle(title: String) {
let titleLabel = UILabel()
titleLabel.text = title
titleLabel.textColor = UIColor.white
titleLabel.textAlignment = .center
titleLabel.sizeToFit()
titleView = titleLabel
}
}
• В ваших контроллерах viewDidLoad
выполните следующие действия
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
title = "Text For Back Button"
navigationItem.customTitle(title: "Title for your view controller")
}
Попробуйте ниже код:
[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];
Если вы используете Storyboard, есть простой способ сделать это (он отлично работал у меня).
Есть два способа сделать это.
Первый способ - по программному коду:
Ответ Якименко Алексей - самый простой способ, Это действительно работает (протестировано на Xcode 8 + iOS 10)
Swift3:
self.navigationItem.backBarButtonItem?.title = "Your customized back title"
Примечание: вы должны вызывать код выше в контроллере представления источника, а не в контроллере представления.
Второй способ - использовать локализацию раскадровки через файл Main.strings
,
"nnnnnnn.title" = "localized string";
nnnnnnn означает идентификатор объекта BackBarButtonItem в контроллере представления source (а не контроллер представления назначения!)
Вам нужно установить свойство "назад" элемента панели навигации, оно автоматически создаст объект BarButtonItem, вы найдете его идентификатор объекта.
Извините, я не смог загрузить скриншоты.
У меня была довольно сложная раскадровка со многими навигационными контроллерами, и мой клиент хотел, чтобы все кнопки "назад" говорили "Назад"
Я прошел в Интерфейсном Разработчике и поместил "Назад" в поле кнопки "Назад" каждого UINavigationItem.
Я не работал для каждого изменения сцены!
Проблема заключалась в том, что не каждый контроллер представления в раскадровке имел UINavigationItem.
Я исправил это, перетаскивая новый UINavigationItem на каждый UIViewController, у которого его не было, и установив для всех полей кнопки "Назад" значение "Назад".
Следите за контроллерами, которые не получают свой собственный UINavigationItem автоматически.
Swift 4
В вашем UIViewController установите это:
let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton
Я нахожусь на ViewController1 и иду к ViewController2. Если я хочу изменить имя кнопки "Назад", отображаемой на ViewController2, я сделаю это в ViewController2.
Swift 5
self.navigationController?.navigationBar.topItem?.title = "BackButtonTitle"
Objective-C
self.navigationController.navigationBar.topItem.title = @"BackButtonTitle";