我有一个使用UINavigationController
的iPhone应用程序,并希望使用自定义背景图像自定义元素。我能够很容易地使用Objective-C类别为UINavigationController's
UINavigationBar
执行此操作,如下所示:
http://foobarpig.com/iphone/uinavigationbar-with-solid-color-or-image-background.html
我想对UINavigationController's
UIToolbar
做同样的事情,但同样的方法似乎不起作用(虽然我完全不知道为什么不这样做。)我环顾四周并且人们似乎建议继承UIToolbar
,但这对于UINavigationController's
工具栏是不可能的,UIToolbar
工具栏是只读的UINavigationController's
。我想使用setToolbarHidden
工具栏而不是仅创建子视图工具栏,因为我正在使用滑入式UINavigationController
动画。
任何人都知道是否可以将背景图片应用于此drawRect
工具栏(最有可能以某种方式覆盖{{1}}方法)?
答案 0 :(得分:10)
<强>更新强>
在iOS 5.0+中,您现在可以使用UIAppearance
自定义导航栏。
另一种方法是简单地为应用程序的UINavigationBar
类创建一个类别。这非常简单易用:
<强>接口强>
@interface UINavigationBar (TENavigationBar)
- (void) drawRect:(CGRect)rect;
@end
<强>实施强>
@implementation UINavigationBar (TENavigationBar)
- (void) drawRect:(CGRect)rect
{
UIImage *image = [UIImage imageNamed:@"navigation_background"];
[image drawInRect:CGRectMake(0,
0,
self.frame.size.width,
self.frame.size.height)];
}
@end
然后,这将全局自动应用于您的所有UINavigationBar
。
答案 1 :(得分:9)
答案 2 :(得分:2)
最好的解决方案之一是创建一个UINavigationBar和UIToolbar类别。接下来的课程为您提供了iOS 4.0和iOS 5.0兼容性的解决方案:
唯一需要调用viewDidLoad中的下一个方法,例如:
// Customizacion de navigation bar y toolbar compatible con iOS4 e iOS5
[UINavigationBar iOS5UINavigationBarBackgroundImage];
[UIToolbar iOS5UIToolbarBackgroundImage];
因此,用于自定义BackgroundImage的iOS 4.0和iOS 5.0兼容类类别如下:
@implementation UINavigationBar (BackgroundImage)
- (void)drawRect:(CGRect)rect
{
UIImage* img = [UIImage imageNamed: @"navigation-bg.png"];
[img drawInRect: CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
[self setTintColor:UIColorFromRGB(0x5ca666)];
}
+ (void) iOS5UINavigationBarBackgroundImage
{
if ([UINavigationBar respondsToSelector: @selector(appearance)])
{
[[UINavigationBar appearance] setBackgroundImage: [UIImage imageNamed: @"navigation-bg.png"] forBarMetrics: UIBarMetricsDefault];
[[UINavigationBar appearance] setTintColor:UIColorFromRGB(0x5ca666)];
}
}
@end
@implementation UIToolbar (BackgroundImage)
- (void)drawRect:(CGRect)rect
{
UIImage *image = [UIImage imageNamed: @"toolbar-bg.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
[self setTintColor:UIColorFromRGB(0x5ca666)];
}
+ (void) iOS5UIToolbarBackgroundImage
{
if ([UIToolbar respondsToSelector: @selector(appearance)])
{
[[UIToolbar appearance] setBackgroundImage:[UIImage imageNamed: @"toolbar-bg.png"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
[[UIToolbar appearance] setTintColor:UIColorFromRGB(0x5ca666)];
}
}
@end
电贺!
答案 3 :(得分:0)
一个简单的选择是子类化UINavigationBar / UIToolbar并使用以下方法初始化导航控制器:
- (instancetype)initWithNavigationBarClass:(Class)navigationBarClass toolbarClass:(Class)toolbarClass
但是,对于简单的自定义(如背景图像,阴影等),我建议使用UIAppearance
协议模式。