IOS 5: Можете ли вы переопределить настройки UIAppearance в определенных классах?

Я создаю приложение со многими контроллерами представлений: у меня есть UITabBarController, который содержит 4 UINavigationController. Я хочу, чтобы все навигационные панели были моим собственным цветом, например синим цветом, который я достигаю, выполняя это в своем делете приложения:

[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];

Но у меня также есть один специальный контроллер представления, у которого есть карта, и для этого контроллера представления я хочу переопределить синий набор навигаторов с помощью UIAppearance, чтобы сделать его черным непрозрачным стилем. Я пробовал, вызывая это внутри viewDidLoad:

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.translucent = YES;

Но ничего не происходит. Можно ли это сделать или мне нужно отказаться от UIAppearance и установить свойства на navigationBar вручную для каждого контроллера вида?

Ответы

Ответ 1

То, как вы это делаете, должно работать, но это не так. Это действительно работает:

[[UINavigationBar appearanceWhenContainedIn:[YourOtherVC class], nil] setTintColor:[UIColor blackColor]];

Ответ 2

Переместите изменения в viewWillAppear: вместо viewDidLoad: и он должен работать.

Ответ 3

Для этого вы бы сделали:

id specialNavBarAppearance = [UINavigationBar appearanceWhenContainedIn:[SpecialViewController class], nil];

[specialNavBarAppearance setBarStyle:UIBarStyleBlack];
[specialNavBarAppearance setTranslucent:YES];