Как обновить вид с помощью UIButtons - PullRequest
0 голосов
/ 25 июня 2009

У меня есть кнопки на панели навигации и в подпредставлении панели инструментов представления контейнера, свойство enabled которого зависит от состояния приложения. В настоящее время кнопки установлены в viewWillAppear, поэтому правильная вещь произойдет, если я уйду от вида и вернусь. Я думал [containerView setNeedsDisplay] справится, но нет.

(У меня есть UITextViews в представлении контейнера, которые я могу принудительно обновить при изменении textView.text, но логика приложения такова, что сложнее явно обновить все правильные кнопки при изменении состояния.)

1 Ответ

0 голосов
/ 28 ноября 2009


Вы можете изменить состояние кнопок навигации и панели инструментов в любом месте своего кода. Для начальной настройки представления полезно поместить некоторый код в 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: .....].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...