Как изменить имя кнопки возврата UINavigationController? - PullRequest
57 голосов
/ 26 марта 2012

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

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

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

Ответы [ 17 ]

182 голосов
/ 26 марта 2012

Если вы хотите сделать это программно, это можно сделать так:

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

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

42 голосов
/ 15 сентября 2012

Существует простой способ сделать это в Интерфейсном Разработчике или Раскадровке. В родительском View Controller просто установите для атрибута «Кнопка назад» элемента навигации любое название, которое вы хотите. Вот пример:

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

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

34 голосов
/ 26 марта 2012

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

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

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

self.navigationItem.title = @"Back";

Работает без раскадровок.

4 голосов
/ 08 декабря 2015

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

dispatch_async(dispatch_get_main_queue(), ^(void) {

    self.navigationController.navigationBar.backItem.title = @"Custom Title";
});
4 голосов
/ 11 сентября 2017

Свифт 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
}

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

2 голосов
/ 20 мая 2015

In Swift Я нашел решение очень простым,

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

self.title = "BackButtonTitle"

Вот и все.

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

1 голос
/ 03 мая 2015

Попробуй так: -

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];
}
1 голос
/ 18 апреля 2013

Очень важно, чтобы в представлении контроллера опция "Симулированные метрики" не была выбрана как "Предполагаемая".

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

1 голос
/ 26 января 2017

Если вы используете ссылки раскадровки, View Controller может не отображать элемент навигации в Interface Builder.

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

После этого вы сможете установить заголовок кнопки «Назад». Здесь вы также можете установить заголовок представления.

Цитируя Мика МакКаллума:

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

1 голос
/ 28 июля 2016

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

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