it-swarm.com.ru

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

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

На моем контроллере с одним представлением у меня есть кнопка Add, где код программно генерирует новую 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];

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

Спасибо

23
skålfyfan

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

27
WrightsCS

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

47
benwong

Вы путаете 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];

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

11
Matt Wilding

Вы не можете заменить 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
Greg Young

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

0
lynulzy