UINavigationBar изменить цвет оттенка в категории
Я знаю, что могу легко изменить цвет оттенка навигационной панели в xib-файле. Но проблема в том, что если мне придется изменить во многих местах.
Поэтому я попытался использовать категорию (fancy) и переопределить метод draw rect.
#import "UINavigationBar+customTint.h"
@implementation UINavigationBar (customTint)
-(void)drawRect:(CGRect)rect{
self.tintColor = [UIColor redColor];
}
@end
Я также импортировал его в соответствующий контроллер представления. Что я делаю неправильно? Какой правильный способ сделать это?
Заранее спасибо
2 ответа
Это один из способов сделать это. Наверное, тебе будет легче ViewController
где когда-либо вам нужно изменить это добавить строку:
self.navigationController.navigationBar.tintColor = [UIColor redColor];
Использование категории только для одной строки, вероятно, излишне.
РЕДАКТИРОВАТЬ: Если вы хотите использовать категорию, вам может потребоваться позвонить setNeedsDisplay
на панели навигации. или переопределить другой метод и вызвать его. Что-то вроде,
[self.navigationController.navigationBar setNeedsDisplay];
Также согласно документации Apple
В iOS 5 реализации UINavigationBar, UIToolbar и UITabBar изменились, так что метод drawRect: не вызывается, если он не реализован в подклассе. Приложения, которые повторно реализовали drawRect: в категории любого из этих классов, обнаружат, что метод drawRect: не вызывается. UIKit выполняет проверку ссылок, чтобы не вызывать метод в приложениях, связанных до iOS 5, но не поддерживает этот дизайн в iOS 5 или более поздней версии. Приложения могут:
- Используйте API настройки для баров в iOS 5 и более поздних версиях, что является предпочтительным способом.
- Подкласс UINavigationBar (или другие классы панелей) и переопределение drawRect: в подклассе.
Поэтому лучший способ сделать это - поместить это в свой ApplicationDidFinishLaunching
NSString *reqSysVer = @"5.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
[[UINavigationBar appearance] setTintColor:myColor];
А также оставьте свой DrawRect
, так что на iOS будет работать меньше 5
Если вы используете iOS5, то правильный способ сделать это - использовать прокси-сервер UIAppearance.
[[UINavigationBar appearance] setTintColor:myColor];
Подробности здесь: https://developer.apple.com/library/ios/#documentation/uikit/reference/UIAppearance_Protocol/Reference/Reference.html