2

我有一个应用程序,允许用户从他们的 iPhone 发送测试电子邮件。我的应用程序调用一个方法来激活撰写邮件功能,如下所示:

-(void)displayComposerSheet
{

    //set up a way to cancel the email here
    //picker is an instance of MSMailComposeViewController already declared in the .h file

    [picker setSubject:@"Test Mail"];

    // Set up recipients

    // Attach an image to the email
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Icon" ofType:@"png"];
    NSData *myData = [NSData dataWithContentsOfFile:path];
    [picker addAttachmentData:myData mimeType:@"image/png" fileName:@"Icon"];

    // Fill out the email body text
    NSString *emailBody = @"This is a test mail.";
    [picker setMessageBody:emailBody isHTML:NO];

    [self presentModalViewController:picker animated:YES];
    NSLog(@"mail is working");

}


- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    emailLabel.hidden = NO;
    // Notifies users about errors associated with the interface
    switch (result)
    {
        case MFMailComposeResultCancelled:
            emailLabel.text = @"Mail sending canceled.";
            break;
        case MFMailComposeResultSaved:
            emailLabel.text = @"Mail saved.";
            break;
        case MFMailComposeResultSent:
        {
            emailLabel.text = @"Mail sent.";
            NSLog(@"It's away!");


            UIAlertView *emailAlertView = [[UIAlertView alloc] initWithTitle:@"Sent!" message:@"Mail sent successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [emailAlertView show];
            [self dismissModalViewControllerAnimated:YES];
            [self.navigationController popViewControllerAnimated:YES];


        }
            break;
        case MFMailComposeResultFailed:
        {
            emailLabel.text = @"Mail sending failed.";


        }
            break;
        default:
        {
            emailLabel.text = @"Mail not sent.";

        }
        break;
    }

}

我的问题是当撰写电子邮件功能处于活动状态时,我无法退出此功能并返回我的应用程序。摆脱这种情况的唯一方法是实际继续并发送消息。导航栏的左上角有一个默认的“取消”栏按钮,单击该按钮后,我提供了三个选项:“删除草稿”、“保存草稿”和“取消”。如果我选择“删除草稿”,它只会将我返回到撰写消息屏幕。我有没有办法让用户在启动撰写邮件功能后但在发送之前返回应用程序?有没有办法为“取消”栏按钮添加额外的功能来实现这一点?

提前感谢所有回复的人。

4

4 回答 4

3

您必须MFMessageComposeViewControllerDelegate使用该- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result方法来实现。

您将在此方法中关闭您的消息视图。

编辑:我很困惑,MFMailComposeViewControllerDelegate但目的与MFMessageComposeViewControllerDelegate

于 2013-01-10T17:28:40.167 回答
0

在您的方法中查看您自己的代码...didFinishWithResult:

    case MFMailComposeResultCancelled:
        emailLabel.text = @"Mail sending canceled.";
        break;
    case MFMailComposeResultSaved:
        emailLabel.text = @"Mail saved.";
        break;
    case MFMailComposeResultSent:
    {
        emailLabel.text = @"Mail sent.";
        NSLog(@"It's away!");


        UIAlertView *emailAlertView = [[UIAlertView alloc] initWithTitle:@"Sent!" message:@"Mail sent successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [emailAlertView show];
        [self dismissModalViewControllerAnimated:YES];
        [self.navigationController popViewControllerAnimated:YES];


    }

当结果是MFMailComposeResultSent您关闭模式视图控制器并弹出导航堆栈时,这会导致邮件撰写视图控制器消失,并且还会弹出堆栈以删除呈现撰写视图控制器的视图控制器。但是,当结果为MFMailComposeResultCancelled时,您只需设置一些标签的文本。对MFMailComposeResultSaved. 如果您希望撰写视图控制器在用户取消或保存时消失,您也需要在这些情况下关闭消息撰写视图控制器。

于 2013-01-10T17:44:25.473 回答
0

您应该在视图控制器中添加此方法

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

希望这个可以帮助一些人。

于 2013-06-18T08:25:38.147 回答
0

设置 MFMailComposeViewController 的委托 MFMailComposeViewController *mailcomposer = [[MFMailComposeViewController alloc]init];

mailcomposer.mailComposeDelegate = self;

并使用这个委托方法 -(void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error

于 2013-12-11T05:38:17.640 回答