Как изменить название кнопки «назад» на панели навигации - PullRequest
219 голосов
/ 19 сентября 2009

В настоящее время значение по умолчанию для кнопки левой панели является заголовком представления, которое загрузило текущее, другими словами, представление, которое будет отображаться при нажатии кнопки (кнопка назад).

Я хочу изменить текст, отображаемый на кнопке, на что-то другое.

Я попытался вставить следующую строку кода в метод viewDidLoad контроллера представления, но, похоже, он не работает.

self.navigationItem.leftBarButtonItem.title = @"Log Out";

Что мне делать?

Спасибо.

Ответы [ 36 ]

1 голос
/ 30 марта 2016

Используйте ниже строки кода:

UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@"hello"
                                 style:UIBarButtonItemStylePlain
                                target:nil
                                action:nil];

self.navigationItem.leftBarButtonItems =[[NSArray alloc] initWithObjects:newBackButton, nil];

self.navigationItem.leftItemsSupplementBackButton = YES;
1 голос
/ 31 декабря 2013

Если вы хотите не только изменить текст кнопки «Назад» на тот же текст и сохранить исходную форму стрелки влево, но и сделать что-то, когда пользователь нажимает кнопку «Назад», я рекомендую вам посмотреть вокруг " CustomNavigationController ".

1 голос
/ 22 августа 2014

Согласно документу из UINavigationBar> backItem

enter image description here

Если свойство leftBarButtonItem верхнего элемента навигации имеет вид ноль, на панели навигации отображается кнопка «Назад», название которой получено от объекта в этом свойстве.

Но настройка backItem.backBarButtonItem не работает при первом просмотре WillAppear. Установка topItem.backBarButtonItem работает только в первый раз, когда ViewWillAppear. Потому что navigationBar.topItem все еще указывает на previousViewController.navigationItem. В viewWillLayoutSubviews обновляются topItem и backItem. Поэтому после первого раза viewWillAppear мы должны установить backItem.backBarButtonItem.

ОТВЕТ: Установка backBarButtonItem на navigationItem предыдущего viewController независимо от того, где и когда в вашем текущем viewController (верхний viewController) . Вы можете использовать этот код в viewWillAppear или viewDidLoad. Посмотрите мой пост в блоге iOS Set Navigation Bar Заголовок кнопки Back для детального анализа.

 NSArray *viewControllerArray = [self.navigationController viewControllers];
    // get index of the previous ViewContoller
    long previousIndex = [viewControllerArray indexOfObject:self] - 1;
    if (previousIndex >= 0) {
        UIViewController *previous = [viewControllerArray objectAtIndex:previousIndex];
        previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc]
                                                         initWithTitle:backButtonTitle
                                                         style:UIBarButtonItemStylePlain
                                                         target:self
                                                         action:nil];
    }
1 голос
/ 03 апреля 2015

ПРОБЛЕМА: текст «Назад» на панели навигации заменить нельзя.

REASON: метка «Назад» устанавливается на панели навигации после нажатия представления, потому что атрибут .title в родительском контроллере представления был установлен в ноль (или не инициализирован).

ОДИН РЕШЕНИЕ: Если вы установите self.title = "Независимо от ...", вы увидите, что вместо "Назад" появится сообщение "Независимо от ..." после нажатия нового контроллера представления.

0 голосов
/ 28 октября 2017

Это работает для меня в Swift 4 и iOS 11. Чаще всего мне нужно это делать, когда пользователь нажимает на строку в табличном представлении, а новый контроллер представления помещается в стек навигации. Обычно я хочу, чтобы кнопка «Назад» была именем или каким-либо атрибутом объекта, представленного строкой, которая была нажата. Поэтому я обычно делаю это в didSelectRowAt... так:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let object = // get the object this row represents

    let backButton = UIBarButtonItem()
    backButton.title = object.name // or whatever
    self.navigationItem.backBarButtonItem = backButton

    // now show or segue to the next view controller
}
0 голосов
/ 06 апреля 2014

Кажется, что навигационный контроллер ищет

previousViewController.navigationItem.title

Если там ничего нет, он ищет

previousViewController.title
...