Override UIAppearance property for MFMailComposeViewController Override UIAppearance property for MFMailComposeViewController ios ios

Override UIAppearance property for MFMailComposeViewController


Changing the appearance of a MFMailComposer through normal measures is not possible, but there is a little workaround you can do, which I've used many times before.

Add two methods to the class in which you wish to implement the new look to:

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

Now in your show method, apply the special composer interface changes you'd like to make.

- (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];    }}

And in your delegate, change the interface back to the way it was.

- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{    // Do normal mail composer did finish stuff in here    [self applyGlobalInterfaceAppearance];}


The Mail Composer view is run in a different process under iOS 6 and cannot be tampered with directly (since the view is essentially inside another app). You cannot customize what it shows, it's the same for the Twitter & Facebook views.

Here is a more detailed description of remote view controllers: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/


Simply set the tintColor on the MFMailComposeViewController instance:

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