【问题标题】:Custom uinavigatonbar exception自定义 uinavigatonbar 异常
【发布时间】:2011-06-03 09:21:09
【问题描述】:
我用这种方式制作了一个自定义的导航栏:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
现在我想添加异常以在我将特定视图控制器加载到导航控制器时显示正常的导航栏。
我如何编码该异常?
【问题讨论】:
标签:
iphone
sdk
uinavigationcontroller
uinavigationbar
【解决方案1】:
我认为 UINavigationBar 上的类别不可能做到这一点。
我会建议一个子类,比如CustomNavigationBar
.h
#import <UIKit/UIKit.h>
@interface CustomNavigationBar : UINavigationBar {
}
@end
.m
#import "CustomNavigationBar.h"
@implementation CustomNavigationBar
- (void)drawRect:(CGRect)rect {
UIImage *img = [UIImage imageNamed: @"navigation_background.png"];
[img drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
棘手的是你永远不会自己创建UINavigationBar,这一切都由 UIKit 处理。要仅更改某些条的外观,您必须在运行时手动更改它们的类。
导入
#import <objc/runtime.h>
然后在您的视图控制器中(例如在 viewDidLoad 中),添加
object_setClass(self.navigationController.navigationBar, [CustomNavigationBar class]);