目前,我们正在使用此代码块在整个应用程序中自定义UINavigationBar背景图像:
@implementation UINavigationBar(MyExtensions)
- (UIImage *)barBackground {
return [UIImage imageNamed:@"GlobalTitleBackground.png"];
}
- (void)didMoveToSuperview {
//iOS5 only
if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
[self setBackgroundImage:[self barBackground] forBarMetrics:UIBarMetricsDefault];
}
}
//this doesn't work on iOS5 but is needed for iOS4 and earlier
- (void)drawRect:(CGRect)rect {
//draw image
[[self barBackground] drawInRect:rect];
}
@end
总的来说,这很有效。我遇到的问题是,当我创建一个MFMailComposeViewController时,它的背景也会被定制。
因此,考虑到我现在的代码,是否有可能对所有UINavigationBars 进行自定义,除了由MFMailComposeViewController创建的UINavigationBar ?
提前致谢!
答案 0 :(得分:0)
一种解决方案是使用view.tag属性过滤掉特定的导航控制器。
创建MFMailComposeViewController以将标签添加到导航栏时。
例如:
//In other VC
MFMailController *mailVC = [[MFMailController alloc] init];
mailVC.navigationBar.tag = 5678;
//In @implementation UINavigationBar(MyExtensions)
- (UIImage *)barBackground {
if (self.tag != 5678)
return [UIImage imageNamed:@"GlobalTitleBackground.png"];
}
return nil;
}