navigationItem.backBarButtonItem не работает? Почему предыдущее меню все еще отображается как кнопка?

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

на моем контроллере одного вида у меня есть добавить кнопка, где код программно генерирует новый 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 ответов


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


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


вы путаете backBarButtonItem и leftBarButtonItem. От UINavigationItem docs on backBarButtonItem:

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

Итак, если бы вы изменили:

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];

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


вы не можете заменить 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)];
}

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