Как изменить имя кнопки возврата UINavigationController?
у меня есть UIViewController и я перемещаюсь с моего первого контроллера вида на второй контроллер вида, и я хочу изменить имя кнопки, показанной на navigationcontroller вернуться ....
SecondViewController *secondController = [[SecondViewController alloc]
initWithNibName:nil
bundle:NULL];
[self.navigationController pushViewController:secondController animated:YES];
теперь во второй viewcontroller Я хочу изменить имя кнопки в navigationController.
16 ответов:
в 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, для которого вы хотите установить кнопку назад, и перейдите к инспектору атрибутов, чтобы изменить заголовок кнопки Назад.
Примечание: важно помнить, что вы должны настроить его на контроллер вида, к которому вы вернетесь после нажатия кнопки "назад", а не видимый в данный момент контроллер вида.
есть простой способ сделать это в Interface Builder или раскадровке. В контроллере родительского вида просто установите атрибут "кнопка Назад" элемента навигации в любое название, которое вы хотите. Вот пример:
вид таверны Виллиана будет иметь" назад "в качестве заголовка кнопки "Назад", как мы только что установили в инспекторе атрибутов навигационного контроллера родителя (лучшие бары).
в моем случае он работал только с кодом в основном потоке, например:
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 }Примечание: кнопка "назад" принадлежит предыдущему контроллеру вида, а не тому, который в настоящее время представлен на экране. Чтобы изменить кнопку назад, вы должны обновить ее перед нажатием, на контроллере вида, который инициировал segue:
In Свифт Я нашел решение очень простое,
предположим, что я на ViewControllerA и будет ViewControllerB, Если я хочу изменить имя кнопки Назад, показанной на ViewControllerB, Я сделаю это в ViewControllerA,
self.title = "BackButtonTitle"вот и все.
Примечание: это изменит название ViewControllerA
очень важно, чтобы в контроллере представления параметр "смоделированные метрики" не был выбран как "выведенный".
Я пробовал с "нет" и все правильно!
попробуйте так:-
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";
вы можете достичь этого с помощью
titleViewнаnavigationItemSwift 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"];
Если вы используете раскадровку, есть простой способ сделать это (он отлично работал для меня).
- перейти к раскадровке
- выберите, какой UIViewController вы хотите изменить текст кнопки Назад.
- нажмите на UINavigationItem в верхней части вашего UIViewController. (с названием)
- на правой панели выберите инспектор атрибутов (4-й значок).
- Теперь вы можете установить название, подсказку и кнопку Назад тексты.
Если вы используете ссылки на раскадровку, контроллер Вида может не отображать элемент навигации в Interface Builder.
вручную перетащить панель навигации не будет работать, вам нужно перетащить Навигации Пункт
затем вы сможете установить заголовок кнопки "Назад". Здесь же вы зададите заголовок представления.
Цитирую Мик MacCallum:
Примечание: важно помнить, что вы должны настроить это на контроллере вида, к которому вы вернетесь после нажатия кнопки "назад", а не на текущем видимом контроллере вида.
есть два способа сделать это.
Первый способ-это программный код:
ответ Якименко Алексея-самый простой способ, Это действительно работает (проверено на Xcode 8 + iOS 10)
Swift3:
self.navigationItem.backBarButtonItem?.title = "Your customized back title"Примечание: Вы должны вызвать выше код в контроллере исходного вида, а не контроллер вида назначения.
Второй способ-использовать локализацию раскадровки через ,
"nnnnnnn.title" = "localized string";nnnnnnn означает идентификатор объекта BackBarButtonItem в источник контроллер вида (не контроллер вида назначения!)
вам нужно установить свойство "назад" элемента панели навигации, он автоматически создаст BarButtonItem, вы найдете его идентификатор объекта.
к сожалению, я не смог загрузить скриншоты.
У меня была довольно сложная раскадровка со многими навигационными контроллерами, и мой клиент хотел, чтобы все кнопки назад говорили "назад"
Я прошел в Interface Builder и поставил "назад" в поле кнопки "Назад" каждого UINavigationItem.
Я не работал для каждого изменения сцены!
проблема была в том, что не каждый контроллер вида в раскадровке имел UINavigationItem.
я исправил это, перетащив новый UINavigationItem на каждый UIViewController, который не имел одного, и установка все из полей кнопки "Назад"в " Назад"
следите за контроллерами, которые не задают свой собственный UINavigationItem автоматически.
Swift 4
в своем UIViewController задайте этот:
let backButton = UIBarButtonItem() backButton.title = "[Your title here]" self.navigationItem.backBarButtonItem = backButton



Comments