覆盖MFMailComposeViewController的UIAppearance属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了覆盖MFMailComposeViewController的UIAppearance属性相关的知识,希望对你有一定的参考价值。

我正在使用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];

我是犯了错误还是有更好的方法来实现这个目标?

答案

通过正常的措施改变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];
}
另一答案

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

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

另一答案

只需在MFMailComposeViewController实例上设置tintColor:

[mailInstance.navigationBar setTintColor:[UIColor someColor]];

以上是关于覆盖MFMailComposeViewController的UIAppearance属性的主要内容,如果未能解决你的问题,请参考以下文章

条件覆盖,路径覆盖,语句覆盖,分支覆盖

白盒测试法:逻辑覆盖与路径覆盖

代码覆盖率VS测试覆盖率

覆盖率啥意思

软件测试 白盒测试 语句覆盖 判定覆盖

07-白盒测试方法-逻辑覆盖法