Странное поведение при смене заголовка UIavigationController backItem

Я изменяю заголовок элемента кнопки "Назад" в viewDidAppear контроллера следующим образом:

self.navigationController.navigationBar.backItem.title = @ "Previous";

Это правильно меняет название, но у меня странное поведение. Когда я выбираю кнопку "предыдущий", она меняет заголовок контроллера, который находится в стеке (то есть родительский контроллер теперь имеет заголовок "Предыдущий").

У тебя сейчас почему это произошло?

1 ответ

Решение

Когда вы используете контроллер навигации, вызываете [self setTitle:@"Title"]; Внутри любого контроллера представления в стеке будет установлен заголовок панели навигации. Это также заголовок, используемый по умолчанию для кнопки "Назад", когда вы нажимаете новый контроллер вида. Очевидно, из того, что вы испытываете, явно устанавливая заголовок backItem, также задает его для заголовка панели навигации для предыдущего контроллера представления, переопределяющего все, что указано в вызове -setTitle в контроллере представления.

Вам, вероятно, будет лучше просто управлять заголовком из контроллеров представления в вашем стеке навигации. Когда вы идете, чтобы выдвинуть новый контроллер представления, сделайте это:

[self setTitle:@"Previous"];
NextViewController *controller = [[NextViewController alloc] init];
[[self navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;

Теперь, когда отобразится следующий вид контроллера, кнопка "Назад" с надписью "Назад". Теперь вам просто нужно изменить его обратно на тот, который должен иметь реальный заголовок в -viewWillAppear:

- (void)viewWillAppear:(BOOL)animated;
{
    [self setTitle:@"Real Title"];
    [super viewWillAppear:animated];
}

Это может показаться немного странным, но это лучше, чем пытаться переопределить функциональность панели навигации. Борьба со стеком навигационной панели / навигационного контроллера может оказаться очень неприятной.

С наилучшими пожеланиями.

Другие вопросы по тегам