0

目前,我们正在使用这段代码在整个应用程序中自定义 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 时,它的背景也会被自定义。

因此,考虑到我现在拥有的代码,是否有可能对除 MFMailComposeViewController 创建的 UINavigationBar 之外的所有 UINavigationBars 进行自定义?

提前致谢!

4

1 回答 1

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;
}
于 2012-07-27T22:07:51.200 回答