0

Приветствую! Я поставил мой ** UINavigationBar '** s barStyle к UIBarStyleBlack, и tintColor в цвет (кроме черного, с тем, чтобы получить цвет/градиент происходит). Это хорошо работает.UINavigationBar tintColor не всегда распространяется на объекты UIBarButtonItem

Теперь ... допустим, я нажимаю новый контроллер вида на стек навигационного контроллера. В этом конкретном VC я хочу, чтобы навигационная панель становилась черной, но только внутри этого VC.

Таким образом, в новой ВК viewWillAppear: метода, я поставил нав бар tintColor к нулю (или [UIColor blackColor] - либо один работает). В viewWillDisappear:, я меняю tintColor назад к тому, что он изначально был. Опять же, все хорошо.

Пока я не вернусь в новое VC второе (или дополнительное) время. Если я это сделаю, навигационная панель снова станет черной, но NOT элемент левой кнопки мыши! Вместо этого он сохраняет исходный цвет от родительского VC!

Я просмотрел все образцы кода (даже библиотеку Joo Hewitt's Three20, которая, похоже, делает то же самое, что и моя, для своего контроллера/браузера Photo). Насколько я могу судить, я делаю все правильно, но я в тупике, почему элемент кнопки бара не меняется на черный для всех, но в первый раз, когда я вхожу в свой новый VC.

Ключи приветствуются/оценены!

ответ

0

Из того, что я слышу, это известная ошибка 3.0.

+0

Действительно сейчас! Скажи. –

+0

Посмотрел на http://openradar.appspot.com/, но ничего не нашел. :( –

+0

Похоже, что это исправлено в 3.1. –

0

Попробуйте добавить в контроллер представления РОДИТЕЛЕЙ:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Back", @"") style:UIBarButtonItemStylePlain target:nil action:nil]; 
    [self.navigationItem setBackBarButtonItem:backButton]; 
    [backButton release]; 
} 
+0

По умолчанию, вы имеете в виду родителя контроллера вида, имеющего проблему? Не помещали бы кнопку «Назад» на один уровень слишком высоким? (Обновление: это исправлено в 3.1!) –

0
for (UIView *view in self.navigationController.navigationBar.subviews) 
    { 
     [view setNeedsDisplay]; 
    } 

Надеется, что это помогает.

+0

Хм. Не на 100% уверен, что я согласен с этим. Из документов UINavigationBar: «В отличие от других типов представлений вы не добавляете subviews в панель навигации напрямую». Таким образом, если мы не добавим их , мы на самом деле «не знаем» о них. Я просто не уверен, что наше использование setNeedsDisplay здесь - как угодно - всегда будет работать так, как мы ожидаем, в будущем (не цитируя -знание-unquote, что все подзаголовки). «... вы должны позволить контроллеру навигации управлять стекю элементов навигации и не пытаться самостоятельно модифицировать эти элементы». Между тем, это было исправлено Apple в 3.1, так что это хорошо! –

Смежные вопросы