Как изменить текст кнопки возврата на панели навигации - PullRequest
19 голосов
/ 30 августа 2011

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

Я пытаюсь загрузить новое значение в кнопку "Назад" внутри метода viewdidload, например

UIBarButtonItem *myBarButtonItem = [[UIBarButtonItem alloc] init];
myBarButtonItem.title = @"Back";
self.navigationItem.backBarButtonItem = myBarButtonItem;
[myBarButtonItem release];

однако это не работает.

Ответы [ 10 ]

30 голосов
/ 14 августа 2012

Вам нужно изменить self.navigationItem.backBarButtonItem из предыдущего представления, а не из текущего представления (я знаю, это кажется немного нелогичным).Например, в табличном представлении вы можете сделать следующее:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setTitle:@"My title"];
    UIBarButtonItem *boton = [[UIBarButtonItem alloc] initWithTitle:@"Custom back button text" style:UIBarButtonItemStyleBordered target:self action:@selector(mySelector:)];
    self.navigationItem.backBarButtonItem  = boton;
    [boton release];
}
26 голосов
/ 22 февраля 2013

Здесь документация не так понятна, пока вы не прочитаете, не перечитаете и не поиграете с каждой настройкой.
Чтобы изменить заголовок кнопки возврата по умолчанию, добавьте эту строку в viewDidLoad()

self.navigationController.navigationBar.topItem.title = @"Your Label";

Если вы хотите, чтобы кнопка была невидимой, установите значение @"" пустая строка.

9 голосов
/ 30 августа 2011

Хорошо, разобрался, я разместил этот код в родительском представлении tableView: didSelectRowAtIndexPath: метод.так выглядит мой с несколькими ячейками таблицы, которые пользователь может выбрать.Надеюсь, это поможет.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Navigation logic may go here. Create and push another view controller.
    if (indexPath.section == 0) { //--- picks (first) section

     ChildViewController *childViewController = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil];
     // ...
     // Pass the selected object to the new view controller.
     [self.navigationController pushViewController:childViewController animated:YES];
    //--- this sets the back button to "Back" every time you load the child view.
     self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style: UIBarButtonItemStyleBordered target:nil action:nil] autorelease];

        if(indexPath.row == 0) { //--- picks row
            childViewController.title = @"Bike";
        }
        if(indexPath.row == 1) {
            childViewController.title = @"Model";
        }
        [vehicleSearchResponseTableViewController release];
    }


}
2 голосов
/ 15 июля 2014

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

1 голос
/ 30 августа 2011

Это не сработает так, как вы пытаетесь. Кнопка навигации всегда будет иметь заголовок предыдущего просмотра. Что вы можете сделать, хотя - изменить название первого вида, прежде чем нажать новый. Это единственное, что я мог найти, чтобы решить ту же проблему.

0 голосов
/ 08 июня 2017

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

let titleLabel = UILabel(frame: CGRect(x: (view.frame.width * (3/8)), y: 0, width: (view.frame.width * 0.25 ), height:30))
        titleLabel.text = "Title"
        titleLabel.textAlignment = .center
        titleLabel.textColor = UIColor.white
        titleLabel.font = UIFont.systemFont(ofSize: 20)
        navigationItem.titleView = titleLabel 
0 голосов
/ 18 июня 2016

После viewDidLoad

self.navigationController! .NavigationBar.backItem? .Title = "Назад"

0 голосов
/ 06 июня 2013

Хороший способ сделать это - установить заголовок кнопки «Назад» в родительском контроллере представления перед вызовом потомка следующим образом:

[self.navigationItem.backBarButtonItem setTitle:@"Your Custom Title"];

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

0 голосов
/ 04 июля 2012

Эта статья должна делать то, что вы хотите.

От автора:

Как вы можете видеть выше, все, что вам нужно сделать, это установить leftBarButtonItem контроллера, и он будет скрывать кнопку возврата. Селектор handleBack теперь обрабатывает событие возврата, и вам необходимо вручную извлечь контроллер представления из стека UINavigationController. Вы можете реализовать любой собственный код, даже блокируя выход из страницы.

0 голосов
/ 30 августа 2011

Ваш код до сих пор выглядит хорошо.

Этот код выполняется перед оператором

[super viewDidLoad];

(неверно) или после него (хорошо)?

...