Как изменить название кнопки «назад» на панели навигации

224

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

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

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

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

Что я должен делать?

Спасибо.

Дол
источник

Ответы:

345

Это должно быть помещено в метод, который вызывает ViewController под названием «NewTitle». Прямо перед оператором push или popViewController.

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];
Иордания
источник
47
В дочернем контроллере представления вызов этого из дочернего контроллера представления не будет работать. Вы должны вызывать это из родительского контроллера представления, в то время как внутри дочернего контроллера представления.
Алекс Рейнольдс
2
Чтобы изменить кнопку возврата для моего контроллера представления третьего уровня (второе нажатие), мне пришлось использовать следующую строку вместо вышеуказанного ответа: [[self.parentViewController navigationItem] setBackBarButtonItem: newBackButton]; Я делаю что-то неправильно?
JonB
4
Джордан говорит, что он «[добавил] немного больше ясности относительно того, где разместить код». Здесь еще больше ясности: поместите его в первый (он же родительский) контроллер, непосредственно перед вызовом, чтобы выдвинуть второй (он же дочерний) контроллер.
benvolioT
1
Вы можете создать пользовательский BaseViewController и поместить его в-viewDidLoad:
ArtFeel
2
Вы не должны делать это прямо перед нажатием или поп-игрой. Вы можете сделать это в viewDidLoad или loadView, а также в тех случаях, когда вы устанавливаете заголовок и другие свойства для этого представления. Ответ Виктора Богдана ниже яснее, ИМХО.
Джо Строут
98

В ChildVC это работало для меня ...

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

Работает и в Swift!

self.navigationController!.navigationBar.topItem!.title = "Back"
Питер Пэн
источник
4
Протестировано и проверено на iOS 7 в Xcode 5.0.2. Это изменит название предыдущего экрана на «Назад», когда вы вернетесь к нему.
Алекс Заватоне
Самое простое решение. Работает как на iOS 6, так и на 7. Поставьте базовый UIViewController и готово. Гораздо лучше, чем решение IB или установка в толкании ВК.
Эрик Чен
46
он меняет название предыдущего контроллера представления, вот в чем проблема в этом решении
Никита
2
@Nikita, Вы можете установить плитку обратно в поле зрения. Исчезновение
Дэн Болье
81

Вот документация для backBarButtonItem :

«Когда этот элемент навигации находится непосредственно под верхним элементом в стеке, контроллер навигации извлекает кнопку назад для панели навигации из этого элемента навигации. [...] Если вы хотите указать пользовательское изображение или заголовок для кнопки« Назад » вы можете вместо этого назначить этому свойству элемент пользовательской кнопки панели (с вашим пользовательским заголовком или изображением). "

View Controller A ( «родительский» контроллер представления):

self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;

Когда любой другой контроллер представления B находится сверху стека навигации, а A прямо под ним, кнопка возврата B будет иметь заголовок «Short» .

Виктор Богдан
источник
4
Сложность в том, что вам нужно установить кнопку «Назад» в контроллере PARENT, а не дочерний вид. Потраченный впустую час только что понял это.
Merkurial
56

в Xcode 4.5 с использованием раскадровки, безусловно, самое простое решение, которое я нашел, когда значение кнопки «Назад» не нужно динамически менять, - это использовать поле «Кнопка назад», связанное с элементом навигации контроллера вида, к которому вы хочу кнопку «Назад», чтобы сказать что-то еще.

Например, на скриншоте ниже, я хочу, чтобы кнопка «Назад» для контроллеров, которые я нажимаю, имела «Назад» в качестве заголовка кнопки «Назад».

введите описание изображения здесь

Конечно, это не сработает, если вам нужно, чтобы кнопка «Назад» каждый раз говорила что-то немного другое… Для этого есть все другие решения.

john.k.doe
источник
В первоначальном вопросе ничего не говорилось об использовании раскадровок, поэтому, безусловно, хорошо, что это не принятый ответ, однако верное решение - для разработки на основе раскадровок.
Вильяпоссу
42

Я знаю, вопрос очень старый, но я нашел хорошее решение.

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

Работает от childView! Протестировано с iOS 7.

seniorbenelli
источник
Кажется, это работает только на одном уровне. Это не работает для ребенка, ребенок для меня. iOS 8.
Narco
26

Может быть, я слишком упрощен, но из документации Apple формулировка:

Если пользовательский элемент кнопки панели не определен ни одним из контроллеров представления, используется кнопка возврата по умолчанию, и ее заголовок устанавливается равным значению свойства title предыдущего контроллера представления, то есть контроллер представления на один уровень ниже стек.

Решение, помеченное как правильное выше, устанавливает элемент кнопки по умолчанию из родительского контроллера. Это правильный ответ, но я решаю проблему, изменяя self.titleсвойство UIViewController прямо перед помещением нового контроллера в стек NavigationController.

Это автоматически обновляет заголовок кнопки «Назад» на следующем контроллере, и до тех пор, пока вы self.titleвернетесь к исходному состоянию, viewWillAppearя не смогу увидеть, что этот метод вызывает слишком много проблем.

Jessedc
источник
19

Эта работа лучше для меня. Пытаться :

 self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil];
Фелипе FMMobile
источник
19

В Swift / iOS8 у меня сработало следующее:

let backButton = UIBarButtonItem(
      title: "Back Button Text",
      style: UIBarButtonItemStyle.Bordered,
      target: nil,
      action: nil
);

self.navigationController.navigationBar.topItem.backBarButtonItem = backButton;

Портировано из ответа Фелипе.

Дункан Смит
источник
синтаксис swift 1.1self.navigationController?.navigationBar.topItem?.backBarButtonItem
Уоррен Бертон
3
Стиль должен быть UIBarButtonItemStyle.Plain
Micro
2
Спасибо за это. Какой по-настоящему жалкий API это. И представитель UIKit в целом. Между навигационными панелями и статусными панелями в iOS удивительно, что мы все еще разрабатываем для этой проклятой платформы. Спасибо малышу Иисусу за Stack Overflow и его участников!
Womble
@Wobmle: Вы должны разрабатывать для Android в течение нескольких месяцев;)
fl034
17

Хорошо, вот способ. Если у вас есть контроллер вида «первый» и вы перемещаетесь по другому контроллеру вида «второй», нажимая кнопку или что-то еще, вам нужно проделать некоторую работу. Сначала вам нужно создать BarButtonItem в методе ViewDidLoad «второго» контроллера вида следующим образом;

    UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];

После того, как вы это сделаете, вам нужно записать код для действия "btnBack" в том же файле .m, как этот;

-(IBAction)OnClick_btnBack:(id)sender  {
      [self.navigationController popViewControllerAnimated:YES];
    //[self.navigationController pushViewController:self.navigationController.parentViewController animated:YES];
}

Вот и все.

EEE
источник
2
A leftBarButtonItemне имеет вид a backBarButtonItem, если это важно при разработке приложения.
Алекс Рейнольдс
1
Из опубликованных решений (большое спасибо), похоже, это работает, хотя Алекс и сказал выше, левая кнопка не похожа на элемент задней панели. Как я могу сделать так, чтобы это выглядело как элемент задней панели ???
Дейл
17

У меня был родительский контроллер представления с очень длинным заголовком. Это привело к тому, что текст кнопки «назад» превратился в заголовок дочернего контроллера представления.

После того, как я попробовал несколько разных решений, это то, что я в итоге сделал (расширяя подход @ john.k.doe):

Используя Xcode 7.2, Swift 2

  1. В раскадровке добавьте объект Navigation Itemв сцену родительского представления (не дочерний виртуальный канал).

элемент навигации

  1. На Attributes Inspectorвашем новом Navigation Item, введите spaceсимвол в Back Buttonполе. Подробнее об этом позже.

элемент навигации в иерархии просмотра

добавить символ пробела в поле кнопки «Назад»

  1. В родительском контроллере представления, добавьте следующий код:

фрагмент кода:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

Объяснение:

Кнопка «Назад» относится к родительскому контроллеру представления. Он Navigation Itemдает вам указатель на кнопку «Назад», поэтому вы можете установить заголовок в коде или в раскадровке.

Примечание:

Если оставить Navigation Item Back Buttonтекст в качестве пустой строки по умолчанию, заголовок кнопки «Назад» станет «Назад».

Другие подходы работают, зачем использовать этот?

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

Некоторые из подходов создают новую кнопку возврата и переопределяют существующую. Я уверен, что это работает, и, вероятно, необходимо в некоторых случаях использования. Но я предпочитаю использовать существующие API, когда это возможно.

Смена titleродительского контроллера представления - самое быстрое решение для некоторых ситуаций. Однако это меняет родительский заголовок, поэтому вам нужно управлять состоянием. Вещи также становятся беспорядочными, Tab Bar Controllerпотому что изменения названия вызывают побочные эффекты с Tab Bar Itemназваниями.

Роберт Чен
источник
10

Для тех, кто использует раскадровки, просто выберите родительский (а не тот, который содержит представление цели) вид контроллера (обязательно щелкните правой кнопкой мыши на панели навигации, затем откройте инспектор атрибутов, где вы найдете три входа формы. Третий " Кнопка «Назад» - это то, что мы ищем.

pedrouan
источник
4
Это лучшее решение, если вы не заботитесь о локализации.
MiQUEL
7

Swift версия:

У вашего ребенка ViewController:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}
buxik
источник
это фактически изменит заголовок предыдущего контроллера в стеке на «TEXT», что не идеально.
гравитрон
6

Вот еще один способ сделать это.

В вашем родительском контроллере представления реализуйте следующий метод:

- (void) setBackBarButtonItemTitle:(NSString *)newTitle {
  self.navigationItem.backBarButtonItem.title = newTitle;
}

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

NSArray *viewControllerArray = [self.navigationController viewControllers];
int parentViewControllerIndex = [viewControllerArray count] - 2;
[[viewControllerArray objectAtIndex:parentViewControllerIndex] setBackBarButtonItemTitle:@"New Title"];

Я так и не смог заставить parentViewControllerимущество работать:

[(ParentViewController *)(self.navigationController.parentViewController) setBackBarButtonItemTitle:@"New Title"];

Я не знаю, если это ошибка, или я не использую ее должным образом. Но захват второго-последнего контроллера представления в viewControllersмассиве указывает на родительский контроллер представления, и я могу правильно вызывать родительские методы с этой ссылкой.

Алекс Рейнольдс
источник
6

хорошо. Я лично ненавидел все эти варианты. Поэтому я придумал свое.

На основании информации, которую я видел. Похоже, что контроллер предыдущего представления контролирует свою собственную кнопку «Назад», которая будет представлена ​​на контроллере с принудительным просмотром.

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

Шахта - Контроллер Приглашения Покупателя

Пригласить покупателя - это текст, который установлен по умолчанию.

но кнопку «Назад» нужно было пригласить

Вот код, который я использовал для создания кнопки возврата.

Я поместил этот код в верхнюю часть файла Контроллера (.m), и он автоматически переопределил метод super.

- (UINavigationItem *)navigationItem{
    UINavigationItem *item = [super navigationItem];
    if (item != nil && item.backBarButtonItem == nil)
    {
        item.backBarButtonItem = [[[UIBarButtonItem alloc] init] autorelease];
        item.backBarButtonItem.title = @"Invite";
    }

    return item;
}

Я чувствую, что это гораздо более элегантный способ сделать это.

Я размещаю этот код в одном месте, и он автоматически заполняется при необходимости.

Не нужно вызывать код перед каждым push-запросом.

Надеюсь это поможет

Ленивый Кодер
источник
5
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
                                   initWithTitle:@"Back" 
                                   style:UIBarButtonItemStyleBordered
                                   target:self
                                   action:@selector(OnClick_btnBack:)];
    self.navigationItem.leftBarButtonItem = btnBack;
    [btnBack release];
Gopikrishna
источник
5

Вот ответ:

В viewDidAppear:animated(НЕ в viewDidLoad) сделать следующее

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

Это если вы хотите сохранить форму кнопки назад.

Basheer_CAD
источник
Не плохо, за исключением того, что они могут видеть, как меняются названия. Я попытался в viewWillAppear, и это не работает.
Трэвис М.
5

Ни одно из решений, описанных здесь, не сработало для меня. Поэтому я удалил название со сцены, откуда я пришел, следующим образом:

self.title = @"";

Поэтому, когда новая сцена представлена, обратный текст не появляется.

Я абсолютно согласен, что это не совсем ясное решение, но оно сработало, и ни одно из объяснений не сработало для меня.

Хавьер Калатрава Ллаверия
источник
Чувак, я должен сказать тебе, что сейчас 2017 год, и все еще не хватает $$, чтобы справиться с кнопкой возврата. Ваш метод сработал для меня, и я закончил со знаком «<», хотя я хотел слово «Отмена», но я согласен на то, что я получил. :)
AnBisw
5

Я обнаружил, что лучше всего изменить заголовок текущего контроллера представления в стеке навигации на нужный текст кнопки «Назад», прежде чем переходить к следующему контроллеру представления.

Например

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

Затем в viewDidAppear установите заголовок обратно к желаемому заголовку для исходного VC. Вуаля!

OneInABajilian
источник
5

Для Свифта:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton
Райан Р
источник
4

Я обнаружил, что самый простой способ изменить имя кнопки «назад» - установить заголовок контроллера представления на заголовок кнопки «Назад», а затем заменить titleView в элементе навигации контроллеров представления на пользовательский ярлык с его реальным название.

Как это:

CustomViewController.m

@implementation CustomViewController

- (NSString*)title {
    return @"Back Button Title";
}

- (void)viewDidLoad {
    [super viewDidLoad];
    UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
    customTitleView.text = @"Navigation Bar Title";
    customTitleView.font = [UIFont boldSystemFontOfSize:20];
    customTitleView.backgroundColor = [UIColor clearColor];
    customTitleView.textColor = [UIColor whiteColor];
    customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    customTitleView.shadowOffset = CGSizeMake(0, -1);

    [customTitleView sizeToFit];

    self.navigationItem.titleView = [customTitleView autorelease];
}

@end

Это сделает ваш заголовок в UINavigationBar похожим на нативный. Предоставление контроллеру представления возможности разделить заголовок и заголовок кнопки возврата.

В случае контроллеров представления A и B, A отвечает за то, как сказать, как должна выглядеть его кнопка «назад», пока отображается B.

РЕДАКТИРОВАТЬ: Это также поддерживает родной вид кнопки «Назад» (пункт кнопки со стрелкой влево).

Trenskow
источник
4

Этот код тоже работает. Поместите это на корневой контроллер контроллера навигации:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
user2666203
источник
4

Я новичок в iOS, но я приведу очень простой ответ о переопределении класса контроллера навигации. Я просто переопределил методы push и pop и сохранил заголовок предыдущего контроллера. Извините за вставку в блок JS. Был немного смущен, как вставить его в нормальный блок кода.

#import "MyCustomNavController.h"


@implementation MyCustomNavController {

    NSString *_savedTitle;
}

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title {
    _savedTitle = self.topViewController.title;

    self.topViewController.title = title;
    [super pushViewController:viewController animated:animated];
}

- (UIViewController *)popViewControllerAnimated:(BOOL)animated {

    [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle;
    return [super popViewControllerAnimated:animated];
}

@end

Сергей Бражник
источник
4

self.navigationController.navigationBar.backItem.title = @"TEXT";

И в Свифте:

self.navigationController?.navigationBar.backItem?.title = "TEXT"
GS
источник
3
self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

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

chikuba
источник
3

Большинство решений убивает оригинальный стиль BackButton (кнопка со стрелкой влево) при добавлении обычной кнопки с нужным заголовком.
Поэтому сохранить оригинальный стиль можно двумя способами:
1-й: использовать недокументированный стиль кнопок (110 или что-то в этом роде), который я предпочитаю не делать. Но если вы хотите, вы можете найти, как это сделать здесь, в stackoverflow.
2-й: использовать идею Тренскова. Мне понравилось, и я использую это немного изменилось.
Вместо переопределения - (NSString *) заголовка, я решил сохранить исходный заголовок следующим образом (что позволяет мне использовать заголовки nib, а также заданный заголовок в состоянии push btw).

- (void)viewDidLoad {
    [super viewDidLoad];
    static NSString * backButtonTitle=@"Back"; //or whatever u want

    if (![self.title isEqualToString:backButtonTitle]){

        UILabel* customTitleView = [[UILabel alloc] initWithFrame:CGRectZero];
        customTitleView.text = self.title; // original title
        customTitleView.font = [UIFont boldSystemFontOfSize:20];
        customTitleView.backgroundColor = [UIColor clearColor];
        customTitleView.textColor = [UIColor whiteColor];
        customTitleView.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
        customTitleView.shadowOffset = CGSizeMake(0, -1);

        [customTitleView sizeToFit];

        self.navigationItem.titleView = [customTitleView autorelease];
        self.title = backButtonTitle; 
    }
}

Это решение хорошо работает и выглядит нативно. Также, если использовать его в методе viewDidLoad, он предотвращает выполнение более 1 раза.
Также я попробовал решение Jessedc, но оно выглядит плохо. Это вызывает видимое для пользователя изменение строки заголовка на лету с оригинального на желаемое BackButton и обратно.

Стан
источник
2

Это работает для меня как «упрощенная» версия предыдущих опубликованных ответов.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];

backButton.title = @"Go Back";

self.navigationItem.backBarButtonItem = backButton;

Не забудьте поместить код в родительский контроллер представления (например, представление с вашим табличным представлением или UITableViewController), а не в дочернее или подробное представление (например, UIViewController).

Вы можете легко локализовать строку кнопки «Назад» следующим образом:

backButton.title = NSLocalizedString(@"Back Title", nil);
Лекс Л.
источник
2

У нас есть два ВК A и B.

Если вы хотите изменить заголовок в B, напишите этот код в A

- (IBAction)goToBViewController:(UIButton *)sender {

    BViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"VC"];
    UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"Your title here"
                                                                  style:UIBarButtonItemStylePlain
                                                                 target:nil
                                                                 action:nil];
    [[self navigationItem] setBackBarButtonItem:newBackButton];
    [self.navigationController pushViewController:vc animated:NO];

}

Swift 4.1 Xcode 9.4

let secondViewController = self.storyboard?.instantiateViewController(withIdentifier: "VC"])
let newBackButton = UIBarButtonItem.init(title: "Your title here", style: UIBarButtonItemStyle.plain, target: nil, action: nil)
navigationController?.navigationBar.topItem?.backBarButtonItem = newBackButton
navigationController?.pushViewController(secondViewController!, animated: true)
IOS
источник
1

Ответ Стэна был лучшим. Но это также имеет проблему, когда вы используете контроллер с панелью вкладок и изменяете заголовок контроллера, вы также можете изменить заголовок панели вкладок. Так что лучший ответ - это изменить только view_controller.navigationItem.title и использовать view_controller.navigationItem .title в функции. Ответ здесь: (С ARC и добавьте их в viewDidLoad)

  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }

В моем собственном использовании я делаю эту функцию подобной этой, просто добавьте функцию с однострочным кодом в viewDidLoad.

+ (void)makeSubViewHaveBackButton:(UIViewController*) view_controller{
  static NSString * back_button_title=@"Back"; //or whatever u want
  if (![view_controller.navigationItem.title isEqualToString:back_button_title]){
    UILabel* custom_title_view = [[UILabel alloc] initWithFrame:CGRectZero];
    custom_title_view.text = view_controller.navigationItem.title; // original title
    custom_title_view.font = [UIFont boldSystemFontOfSize:20];
    custom_title_view.backgroundColor = [UIColor clearColor];
    custom_title_view.textColor = [UIColor whiteColor];
    custom_title_view.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
    custom_title_view.shadowOffset = CGSizeMake(0, -1);

    [custom_title_view sizeToFit];

    view_controller.navigationItem.titleView = custom_title_view;
    view_controller.navigationItem.title = back_button_title;
  }
}
jtianling
источник
1

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

jianpx
источник
1

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

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

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

Хавьер Калатрава Ллаверия
источник