Как изменить имя кнопки обратной связи UINavigationController?

У меня есть UIViewController, и я перехожу от своего первого контроллера представления к контроллеру второго представления, и я хочу изменить имя кнопки, показанной на navigationcontroller, для возврата назад.

SecondViewController *secondController = [[SecondViewController alloc]
                                              initWithNibName:nil
                                              bundle:NULL]; 
[self.navigationController pushViewController:secondController  animated:YES];

теперь во втором viewcontroller Я хочу изменить имя кнопки в navigationcontroller.

Ответ 1

В viewWillAppear напишите это

self.navigationItem.title = @"List View";

И в ViewWilldisapper напишите это

self.navigationItem.title = @"Back";

Он работает без досок объявлений.

Ответ 2

Если вы хотите сделать это программно, это можно сделать следующим образом:

Objective-C

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
                                                             style:UIBarButtonItemStyleBordered
                                                            target:nil
                                                            action:nil];

[self.navigationItem setBackBarButtonItem:backItem];

Swift

let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem

Однако, если вы предпочитаете использовать Interface Builder, просто выберите UINavigationItem, для которого вы хотите установить обратную кнопку, и перейдите к инспектору атрибутов, чтобы изменить заголовок кнопки.

enter image description here

ПРИМЕЧАНИЕ.. Важно помнить, что вы должны настроить это на контроллере представления, к которому вы бы возвращались, нажав кнопку "Назад", а не на текущий вид контроллера вида.

Ответ 3

В интерфейсе Builder или Storyboarding есть простой способ сделать это. В родительском контроллере View просто установите атрибут "Back Button" элемента навигации на любой желаемый заголовок. Вот пример:

Set Back Button Title of child view controller form parent view controller

Виллианский таверн View будет иметь "Назад" в качестве заголовка Back Button, как мы только установили в инспекторе атрибутов родительского навигационного контроллера (Best Bars).

Ответ 4

В моем случае он работал только с кодом на основном потоке, например:

dispatch_async(dispatch_get_main_queue(), ^(void) {

    self.navigationController.navigationBar.backItem.title = @"Custom Title";
});

Ответ 5

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
}

Примечание. Кнопка "Назад" относится к предыдущему диспетчеру просмотра, а не к изображаемому на экране. Чтобы изменить кнопку "Назад", вы должны обновить ее перед нажатием, на контроллере представления, который инициировал сеанс:

Ответ 6

В Swift я нашел очень простое решение,

Предположим, я нахожусь на ViewControllerA и иду к ViewControllerB. Если я хочу изменить имя кнопки "Назад", отображаемой на ViewControllerB, я сделаю это в ViewControllerA,

self.title = "BackButtonTitle"

Это.

Примечание: - Это изменит заголовок ViewControllerA

Ответ 7

Очень важно, чтобы опция "Имитированные показатели" не была выбрана как "Inferred".

Я пробовал с "Нет" и все правильно!

Ответ 8

Попробуйте следующее: -

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];
}

Ответ 9

На самом деле, вы можете изменить название кнопки назад:

self.navigationItem.backBarButtonItem.title = @"NewName";

Ответ 10

Если вы используете ссылки Storyboard, контроллер View может не отображать элемент навигации в построителе интерфейса.

Ручная перетаскивание панели навигации не будет работать, вам нужно перетащить Элемент навигации

Затем вы сможете установить заголовок своей кнопки. Здесь также указывается название представления.

Цитата: Mick MacCallum:

ПРИМЕЧАНИЕ.. Важно помнить, что вы должны настроить это на контроллере представления, к которому вы бы возвращались, нажав кнопку "Назад", а не на текущий вид контроллера вида.

Ответ 11

Вы можете достичь этого, используя 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")
}

Ответ 12

Попробуйте ниже код:

[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];

Ответ 13

Если вы используете Storyboard, есть простой способ сделать это (он отлично работал у меня).

  • Перейдите к раскадровке.
  • Выберите, какой UIViewController вы хотите изменить текст кнопки назад.
  • Нажмите UINavigationItem в верхней части вашего UIViewController. (тот, у кого заголовок)
  • На панели справа выберите инспектор атрибутов (4-й значок).
  • Теперь вы можете установить тексты Title, Prompt и Back Button.

enter image description here

Источник: http://pinkstone.co.uk/how-to-change-the-back-button-text-on-a-uinavigationcontroller-in-your-storyboard/

Ответ 14

Есть два способа сделать это.

Первый способ - по программному коду:

Ответ Якименко Алексей - самый простой способ, Это действительно работает (протестировано на Xcode 8 + iOS 10)

Swift3:

self.navigationItem.backBarButtonItem?.title = "Your customized back title"

Примечание: вы должны вызывать код выше в контроллере представления источника, а не в контроллере представления.

Второй способ - использовать локализацию раскадровки через файл Main.strings,

"nnnnnnn.title" = "localized string";

nnnnnnn означает идентификатор объекта BackBarButtonItem в контроллере представления source (а не контроллер представления назначения!)

Вам нужно установить свойство "назад" элемента панели навигации, оно автоматически создаст объект BarButtonItem, вы найдете его идентификатор объекта.

Извините, я не смог загрузить скриншоты.

Ответ 15

У меня была довольно сложная раскадровка со многими навигационными контроллерами, и мой клиент хотел, чтобы все кнопки "назад" говорили "Назад"

Я прошел в Интерфейсном Разработчике и поместил "Назад" в поле кнопки "Назад" каждого UINavigationItem.

Я не работал для каждого изменения сцены!

Проблема заключалась в том, что не каждый контроллер представления в раскадровке имел UINavigationItem.

Я исправил это, перетаскивая новый UINavigationItem на каждый UIViewController, у которого его не было, и установив для всех полей кнопки "Назад" значение "Назад".

Следите за контроллерами, которые не получают свой собственный UINavigationItem автоматически.

Ответ 16

Swift 4

В вашем UIViewController установите это:

let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton

Ответ 17

Я нахожусь на ViewController1 и иду к ViewController2. Если я хочу изменить имя кнопки "Назад", отображаемой на ViewController2, я сделаю это в ViewController2.

Swift 5

self.navigationController?.navigationBar.topItem?.title = "BackButtonTitle"

Objective-C

self.navigationController.navigationBar.topItem.title = @"BackButtonTitle";