BBringardner
BBringardner

Reputation: 87

Why won't MFMailComposeViewController dismiss during in-app email?

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");

}

}

Upvotes: 4

Views: 1989

Answers (1)

rmaddy
rmaddy

Reputation: 318774

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.

Upvotes: 13

Related Questions