我知道我可以轻松更改xib文件中导航栏的色调颜色。但问题是,如果我必须在很多地方改变。
因此我尝试使用(花哨)类别并覆盖draw rect方法。
#import "UINavigationBar+customTint.h"
@implementation UINavigationBar (customTint)
-(void)drawRect:(CGRect)rect{
self.tintColor = [UIColor redColor];
}
@end
我也在相应的视图控制器中导入了它。我究竟做错了什么? 什么是正确的做法?
提前谢谢
答案 0 :(得分:2)
这是一种做法。在ViewController
你可能只需要更改它就可以更容易添加一行:
self.navigationController.navigationBar.tintColor = [UIColor redColor];
仅使用一行的类别可能有点过分。
编辑:
如果您确实想要使用类别,则可能需要在导航栏上调用setNeedsDisplay
。或覆盖另一种方法并调用它。
像,
[self.navigationController.navigationBar setNeedsDisplay];
Also according to Apple's documentation
在iOS 5中,UINavigationBar,UIToolbar和UITabBar实现已更改,因此除非在子类中实现,否则不会调用drawRect:方法。已重新实现drawRect的应用程序:在任何这些类的类别中将发现未调用drawRect:方法。 UIKit进行链接检查以防止在iOS 5之前链接的应用程序中调用该方法,但在iOS 5或更高版本上不支持此设计。 应用可以:
- 在iOS 5及更高版本中使用自定义API,这是首选方式。
- 子类UINavigationBar(或其他bar类)并覆盖子类中的drawRect:。
因此,最好的方法是将其放在ApplicationDidFinishLaunching
NSString *reqSysVer = @"5.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending)
[[UINavigationBar appearance] setTintColor:myColor];
并保留DrawRect
,以便它可以在低于5的iOS上运行
答案 1 :(得分:2)
如果您使用的是iOS5,那么正确的方法是使用UIAppearance代理。
[[UINavigationBar appearance] setTintColor:myColor];