防止定制MFMailComposeViewController背景图像

时间:2012-07-27 21:40:20

标签: objective-c ios cocoa-touch uinavigationbar mfmailcomposeviewcontroller

目前,我们正在使用此代码块在整个应用程序中自定义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

提前致谢!

1 个答案:

答案 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;
}