我想对 UINavigationBar 进行子类化(以设置自定义背景图像和文本颜色)并将其用于我的应用程序中的所有导航栏。查看UINavigationController的API文档,看起来navigationBar是只读的:
@property(nonatomic, readonly) UINavigationBar *navigationBar
有没有办法在我的 UIViewControllers 中实际使用自定义 UINavigationBar?我知道其他应用程序已经完成了自定义导航栏,例如 flickr:
http://img.skitch.com/20100520-bpxjaca11h5xne5yakjdc2m6xx.png
这是我的 UINavigationBar 子类:
#import <UIKit/UIKit.h>
@interface MyNavigationBar : UINavigationBar <UINavigationBarDelegate> {
}
@end
实现
#import "MyNavigationBar.h"
@implementation MyNavigationBar
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect {
// override the standard background with our own custom one
UIImage *image = [[UIImage imageNamed:@"navigation_bar_bgd.png"] retain];
[image drawInRect:rect];
[image release];
}
#pragma mark -
#pragma mark UINavigationDelegate Methods
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
// use the title of the passed in view controller
NSString *title = [viewController title];
// create our own UILabel with custom color, text, etc
UILabel *titleView = [[UILabel alloc] init];
[titleView setFont:[UIFont boldSystemFontOfSize:18]];
[titleView setTextColor:[UIColor blackColor]];
titleView.text = title;
titleView.backgroundColor = [UIColor clearColor];
[titleView sizeToFit];
viewController.navigationItem.titleView = titleView;
[titleView release];
viewController.navigationController.navigationBar.tintColor = [UIColor colorWithRed:0.1 green:0.2 blue:0.3 alpha:0.8];
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
}
- (void)dealloc {
[super dealloc];
}
@end
我知道我可以使用类别来更改背景图像,但我仍然希望能够设置导航栏标题的文本颜色
@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navigation_bar_bgd.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
有什么建议或其他解决方案吗?我基本上想创建一个浅色背景和深色文本,就像 Flickr 的应用程序导航栏
最佳答案
不知道你是否明白了这一点。但对于其他可能遇到此问题的人...
您需要做的是将 XIB 中的类指定为您的类名(在本例中为 MyNavigationBar。
查看 WWDC 2011 中的第 123 场 session 。
关于iphone - 子类化 UINavigationBar ...如何在 UINavigationController 中使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2878664/