How to override the drawRect method in UINavigationBar dynamically?
我的大多数应用程序都有一个静态UINavigationBar,但最后我有一些视图控制器,它们需要根据视图控制器本身的某些属性动态设置背景图像。
我当前必须设置的代码可以正常工作,但动态部分除外。 是否可以在运行时重写drawRect方法以动态设置背景图像?
1 2 3 4 5 6 7 8 | @implementation UINavigationBar (UINavigationBarCategory) - (void)drawRect:(CGRect)rect { UIColor *color = [UIColor blackColor]; UIImage *img = [UIImage imageNamed: @"nav.png"]; [img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; self.tintColor = color; } @end |
使用类别覆盖方法是错误的事情,即使在这种情况下也可以使用。
如果您在NIB中实例化了导航控制器,则可以子类化UINavigationBar,然后在Interface Builder中将导航控制器的bar类设置为您自己的bar类。 完成此操作后,您将可以更好地控制导航栏的外观。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | @interface MyNavigationBar : UINavigationBar { UIImage* customImage; } @property(nonatomic,retain) UIImage* customImage; @end @implementation MyNavigationBar -(void)drawRect:(CGRect)rect { if (self.customImage) { // draw your own image } else { [super drawRect:rect]; } } @end |
请记住,要使"自定义"视图控制器在