I am working on an iPad app which creates a PDF which the user then emails in from the app. I have been able to successfully setup the email to attach the PDF, but I cannot get the MFMailComposeViewController to dismiss. I have read through several other questions on this issue and attempted to mimic what they are doing, but the mail composer still will not dismiss. What do I need to change in my code to get it to dismiss?
- (IBAction)submitDailyReportButton:(id)sender {
MFMailComposeViewController *mail = [[MFMailComposeViewController alloc]init];
[mail setMailComposeDelegate:self];
if ([MFMailComposeViewController canSendMail]) {
NSString *email =@"[email protected]";
NSArray *emailArray = [[NSArray alloc]initWithObjects:email,nil];
[mail setToRecipients:emailArray];
[mail setSubject:@"Daily Report"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *newFilePath = [[paths objectAtIndex:0]stringByAppendingPathComponent:@"report.pdf"];
NSData *pdfData = [NSData dataWithContentsOfFile:newFilePath];
[mail addAttachmentData:pdfData mimeType:@"application/pdf" fileName:@"report.pdf"];
NSString *body = @"Please review the attached daily report";
[mail setMessageBody:body isHTML:NO];
[mail setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:mail animated:YES completion:nil];
}else{
NSLog(@"Message cannot be sent");
}
}
You have to implement the delegate method and dismiss the view controller in the delegate method.
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
[self dismissViewControllerAnimated:YES completion:nil];
}
Side note - there is no need to create the mail composer if you can't send email. Move the allocation inside the if
statement.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With