Override UIAppearance property for MFMailComposeViewController

前端 未结 3 1327
[愿得一人]
[愿得一人] 2020-12-09 04:34

I am using the UIAppearance protocol to set the background image of UINavigationBar objects throughout my app.

[[UINavigationBar appearance] setBackgroundIma         


        
相关标签:
3条回答
  • 2020-12-09 04:43

    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/

    0 讨论(0)
  • 2020-12-09 04:45

    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];
    }
    
    0 讨论(0)
  • 2020-12-09 04:46

    Simply set the tintColor on the MFMailComposeViewController instance:

    [mailInstance.navigationBar setTintColor:[UIColor someColor]];
    
    0 讨论(0)
提交回复
热议问题