navigationItem.backBarButtonItem не работает?Почему предыдущее меню все еще отображается как кнопка? - PullRequest
24 голосов
/ 11 февраля 2011

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

На моем контроллере с одним представлением у меня есть кнопка Добавить , где код программно генерирует новый UIViewController:

- (void)add:(id)sender 
{
    MyAddViewController *addController = [[MyAddViewController alloc] initWithNibName:@"MyAddViewController" bundle:nil];

    [self.navigationController pushViewController:addController animated:YES];

    [addController release];
}

Это работает, и когда я нажимаю кнопку добавления, он детализируется в новом представлении. Внутри viewDidLoad метода MyAddViewController.m у меня есть:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

Но это не работает. Кнопка возврата в контроллере навигации остается заголовком контроллера предыдущего представления в стеке. Кажется, что линия ничего не делает. Я что-то пропустил?

Спасибо

Ответы [ 5 ]

49 голосов
/ 11 февраля 2011

self.navigationItem.backBarButtonItem для кнопки «назад», которая появляется на виде, который нажимается контроллером вида. Поэтому вам нужно переместить эту строку на предыдущий контроллер представления.

27 голосов
/ 11 февраля 2011

Это будет работать только на каждом дочернем элементе после viewController, который имеет self.navigationItem.backBarButtonItem.

12 голосов
/ 11 февраля 2011

Вы путаете backBarButtonItem и leftBarButtonItem.Из UINavigationItem документов на backBarButtonItem:

Когда этот элемент является задним элементом на панели навигации - когда это следующий элемент под верхним элементом - онможет быть представлен в виде кнопки возврата на панели навигации.Используйте это свойство, чтобы указать кнопку возврата.Цель и действие элемента кнопки задней панели, который вы установили, должны быть равны нулю.Значением по умолчанию является элемент панели кнопок, отображающий заголовок элемента навигации.

Итак, если вам нужно изменить:

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

На:

self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];

Я верю, что вы получите желаемый эффект.

5 голосов
/ 08 октября 2012

Вы не можете заменить backBarButtonItem, но вы можете использовать leftBarButtonItem, чтобы переопределить его.Но чтобы заставить новую кнопку работать так же, как кнопку «назад», вам нужно установить цель и действие новой кнопки примерно так:

- (void)dismissMyView {
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc]
        initWithTitle:@"Quit" style: UIBarButtonItemStyleBordered
        target:self action:@selector(dismissMyView)];
}
0 голосов
/ 22 июня 2015

Если ViewController A нажимает ViewController B, в то время как мы хотим установить заголовок кнопки задней панели, мы должны установить "self.navigationItem.backBarButtonItem = ..". Если он был установлен в ViewController B, он не будет работать так, как нам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...