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.