Странное поведение при изменении UinavigationController.
-
27-09-2019 - |
Вопрос
Я изменяю заголовок пуска на кнопку «Назад» в ViewDiDAppear контроллера следующим образом:
self.navigationController.naviggationbar.backitem.title = @ "предыдущий";
Он правильно меняет там, но у меня странное поведение. Когда я выбираю кнопку «Предыдущая», она изменяет ударного контроллера, который находится в стеке (т.е. родительский контроллер теперь имеет название «предыдущий».
Вы сейчас, почему это произошло?
Решение
Когда вы используете навигационный контроллер, вызывая [Selfitle Settitle: @ «Название»]; Внутри любого контроллера просмотра в стеке установит заголовок навигации. Это также заголовок, используемый по умолчанию для кнопки назад, когда вы нажали новый контроллер представления. По-видимому, из того, что вы испытываете, явно установленные заголовка реквидата, также устанавливает его для заголовка навигации на навигационную панель для предыдущего контроллера просмотра, отмечающего все, что указано в вызове, чтобы -settle в контроллере представления.
Вы, вероятно, будете лучше просто управлять названием из нескольких контроллеров просмотра в вашем навигационном стеке. Когда вы идете на точку нового контроллера представления, сделайте это:
[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];
}
Это может почувствовать немного хаки, но лучше, чем пытаться переопределить функциональность навигационной панели. Борьба со стеком контроллера NAV BAR / NAV может оказаться очень расстраивающим.
С наилучшими пожеланиями.