Подтвердить что ты не робот

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

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

Спасибо

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Вы вводите в заблуждение backBarButtonItem и leftBarButtonItem. Из UINavigationItem docs в backBarButtonItem:

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

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

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

To:

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

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

Ответ 4

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

Ответ 5

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