Question

I have a UIAlertView that launches an email and a messages screen. When a user clicks on the Alert's button, both views open, however, they do not close.

I have a tried adding:

-(void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
    [self dismissModalViewControllerAnimated:YES];
}

to the body of the class, however, it did not help.

Here is how the email is presented:

    [viewController presentViewController:email animated:YES completion:nil];

Edit Here is the entire code I am using to present the email:

//send email...
-(void)sendEmail{

    //mail composer
    Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));
    if(mailClass != nil){
        if([mailClass canSendMail]){

            //get the current view controller from the App Delegate
            apptester_appDelegate *appDelegate = (apptester_appDelegate *)[[UIApplication sharedApplication] delegate];
            UIViewController *viewController = [appDelegate getViewController];

            MFMailComposeViewController *email = [[MFMailComposeViewController alloc] init];
            email.mailComposeDelegate = self;

            //navigation bar color depends on iOS7 or lower...
            if(floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1){
                [[email navigationBar] setTintColor:[UIColor blackColor];
            }else{
                [[email navigationBar] setBarTintColor:[UIColor blackColor]];
            }

            //show the model view...
            [viewController presentViewController:email animated:YES completion:nil];

        }
    }
}

Has anyone else experienced this error?

This may not be relevant, but this app has a tab bar.

Was it helpful?

Solution

Make sure you have set delegate for mail controller

   mail.mailComposeDelegate = viewController;

Also try this as well,

    [viewController.tabBarController presentViewController:email animated:YES completion:nil];

Have you try this method and pass "controller" instead of self:

   -(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
    {
       [controller dismissViewControllerAnimated:YES completion:nil];
    }

Thanks!

OTHER TIPS

It is the responsibility of presenting controller to dismiss the modal view. Make sure you implement the delegate of the modal in the presenting controller.

Two things:

1) Make sure you set the mailComposeDelegate on the MFMailComposeViewController before you present it.

2) In your mailComposeController:didFinishWithResult:error: method, you should do:

[controller dismissModalViewControllerAnimated:YES];
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top