0

I have implemented MFMailComposeViewController in almost all of my previous iOS apps and I never got this issue before. My code works fine in iOS 8 and dismiss email screen immediately but it doesn't do the same in iOS 9. My HTML string is also correct and it composes correct email message body.

On iOS 8 device, when I click on email button , it opens email compose screen. I can save draft/ cancel email/ send email and it immediately dismisses email screen and returns to the screen that contains email button.

While on iOS 9 device, I can open email compose screen and it shows correct subject and email message body but when I click on save draft/ cancel email/ send email then it never dismisses email compose screen.

I don't see any error in my code. Did apple change something in iOS 9 which is not allowing my code to work?

//.h file

#import <UIKit/UIKit.h>

#import <MessageUI/MessageUI.h>
#import <MessageUI/MFMailComposeViewController.h>

@interface ViewController : UIViewController<MFMailComposeViewControllerDelegate>{


}

@property(nonatomic,assign) id<MFMailComposeViewControllerDelegate> mailComposeDelegate;


- (IBAction)emailThisAdToFriends:(id)sender;


@end

Here is my .m file code

#import "ViewController.h”

@interface ViewController ()
@end

@implementation ViewController

NSString *finalEmailString;

- (void)viewDidLoad {
    [super viewDidLoad];

}


-(void)createStringToEmail {

   //create finalEmailString which is HTML Code    

   //html code 

  }


- (IBAction)emailThisAdToFriends:(id)sender {

     //compose email string --(finalEmailString)

     [self createStringToEmail];


    if ([MFMailComposeViewController canSendMail])
    {

        MFMailComposeViewController *mailViewController = [[MFMailComposeViewController alloc] init];
        mailViewController.mailComposeDelegate = self;
        [mailViewController setSubject:@“mySubject”];
        [mailViewController setMessageBody:finalEmailString isHTML:YES];

        //present controller

        UIViewController *controller = self.view.window.rootViewController;

        [controller presentViewController:mailViewController animated: YES completion:nil];


    }
    else
    {
        NSLog(@"Device unable to send mail");
    }

}


- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
    switch (result) {
    case MFMailComposeResultSent:
    {

        NSLog(@“Sent email.");

        break;
    }

    case MFMailComposeResultSaved:
    {

        NSLog(@"saved draft");

        break;
    }

    case MFMailComposeResultCancelled:
    {


        NSLog(@"cancelled");

        break;
    }

    case MFMailComposeResultFailed:
    {

        NSLog(@"Mail failed");

        break;
    }

    default:
    {

        NSLog(@"An error occurred “);

        break;
    }
}

//dismiss email compose screen

 UIViewController *dismissController = self.view.window.rootViewController;

[dismissController dismissViewControllerAnimated:YES completion:NULL];

}

@end

Any help is appreciated.

Thanks.

1 Answers1

0

Try to replace :

UIViewController *controller = self.view.window.rootViewController;

[controller presentViewController:mailViewController animated: YES completion:nil];

With :

[self presentViewController:mailViewController animated:YES completion:NULL];

And

UIViewController *dismissController = self.view.window.rootViewController;

[dismissController dismissViewControllerAnimated:YES completion:NULL];

With :

[self dismissViewControllerAnimated:YES completion:NULL];
Pipiks
  • 2,018
  • 12
  • 27