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