Вы можете изменить состояние кнопок навигации и панели инструментов в любом месте своего кода. Для начальной настройки представления полезно поместить некоторый код в viewWillDisappear и viewWillAppear, как вы уже сделали.
Например, если вы хотите программно изменить кнопку на панели навигации с «Отмена» на «Ввод», когда вы добавили какой-то текст в текстовое поле, вы можете просто инициализировать новый UIBarButtonItem и вставить его туда, где был старый. , Скажем, вы добавили кнопку «Отмена» в вашем представлении, как будто ...
- (void)viewWillAppear:(BOOL)animated {
self.navigationItem.rightBarButtonItem =
[[[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelAction)] autorelease];
}
тогда в другом месте вашего кода вы можете просто перезаписать этот элемент навигации, создав новый точно таким же образом. Тем не менее, вы, очевидно, захотите дать ему другое название («Enter» в моем примере здесь) и, возможно, другое действие.
С точки зрения панели инструментов, UINavigationControllers может легко обрабатывать изменения. Это потому, что каждая комбинация UINavigationController + UIViewController поставляется со встроенной панелью инструментов, просто они не отображают ее, если вы специально не запросите это.
Лучший способ сделать это - установить элементы панели инструментов для UIViewController, а затем попросить navigationController отобразить / скрыть панель инструментов по мере необходимости.
Так, например, скажем, я делаю три экземпляра UIBarButtonItem в методе инициализации UIViewController ... тогда все, что мне нужно сделать, это вставить их в массив и назначить этот массив элементов на панели инструментов например,
[self setToolbarItems:[NSArray arrayWithObjects:button1, button2, button3, nil] animated:NO];
затем в методах viewWillAppear (или viewDidAppear) я могу использовать navigationController для отображения панели инструментов:
[self.navigationController setToolbarHidden:NO animated:YES];
Просто не забудьте сделать обратное, когда представление исчезнет (то есть тот же вызов, но с setToolbarHidden: YES).
В любой точке кода для вашего UIViewController вы можете изменить кнопки, используя тот же подход, что и при инициализации, то есть [self setToolbarItems: .....].