17

我正在使用 UIAppearance 协议在整个应用程序中设置 UINavigationBar 对象的背景图像。

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"image-name"] forBarMetrics:UIBarMetricsDefault];

我想为 MFMailComposeViewController 的实例覆盖它,以便显示默认样式导航栏。我尝试使用 appearanceWhenContainedIn 进行设置,这适用于 iOS 5,但不适用于 iOS 6。

[[UINavigationBar appearanceWhenContainedIn:[MFMailComposeViewController class], nil] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];

我是在犯错误还是有更好的方法来实现这一点?

4

3 回答 3

24

无法通过常规措施更改 MFMailComposer 的外观,但是您可以采取一些解决方法,我之前已经使用过很多次了。

将两个方法添加到您希望在其中实现新外观的类:

- (void)applyComposerInterfaceAppearance
{
    [[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
}

- (void)applyGlobalInterfaceAppearance
{
    // My default color of choice
    [[UINavigationBar appearance] setTintColor:[UIColor redColor]];
}

现在在您的 show 方法中,应用您想要进行的特殊作曲家界面更改。

- (void)showMailComposer
{
    if ([MFMailComposeViewController canSendMail]) 
    {
        [self applyComposerInterfaceApperance];

        MFMailComposeViewController *viewController = [[MFMailComposeViewController alloc] init];
        viewController.mailComposeDelegate = delegate;
        [viewController setToRecipients:mailRecepients];
        [viewController setSubject:mailSubject];
        [viewController setMessageBody:messageBody isHTML:NO];
        [self presentModalViewController:viewController animated:YES];
    }
}

在您的委托中,将界面更改回原来的样子。

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    // Do normal mail composer did finish stuff in here
    [self applyGlobalInterfaceAppearance];
}
于 2013-03-22T22:15:29.510 回答
2

Mail Composer 视图在 iOS 6 下运行在不同的进程中,不能被直接篡改(因为视图本质上是在另一个应用程序中)。您无法自定义它显示的内容,Twitter 和 Facebook 视图也是如此。

这是远程视图控制器的更详细描述:http: //oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/

于 2013-03-22T21:53:47.137 回答
1

只需在 MFMailComposeViewController 实例上设置 tintColor:

[mailInstance.navigationBar setTintColor:[UIColor someColor]];
于 2014-09-11T18:16:26.867 回答