0

的定制目前我们使用的代码块,在整个我们的应用程序定制UINavigationBar的背景图片:防止MFMailComposeViewController背景图像

@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

一个解决方案是通过使用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; 
} 
+0

是除了这个还有什么其他的解决方案? – 2012-10-03 12:46:19

+0

您可以删除该特定视图MFMailController的自定义导航栏。 [mailVC setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; – 2012-10-03 13:52:34

+0

如果使用外观代理完成了该怎么办? – 2012-10-03 15:14:46