4

如果用户发送或取消,我试图在完成后从我的应用程序中关闭邮件。但出于某种原因,这永远不会被解雇。我几乎尝试了一切。我也记录了这个,所以我会看看它是否去解雇方法。问题就在那里,因为它永远不会进入dismiss方法。

我究竟做错了什么???

- (IBAction)sendmail:(id)sender{
    UIGraphicsBeginImageContext(self.view.frame.size);
    [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    NSData * imageData = UIImageJPEGRepresentation(image, 1.0);

    if ( [MFMailComposeViewController canSendMail] ) {
        MFMailComposeViewController * mailComposer = [[MFMailComposeViewController alloc] init];
        mailComposer.delegate = self;
        [mailComposer addAttachmentData:imageData mimeType:@"image/jpeg" fileName:@"attachment.jpg"];

        [mailComposer setSubject:@"Hello from My App!"];

        NSString *emailBody = @"Sent from My App, Still not in AppStore!";
        [mailComposer setMessageBody:emailBody isHTML:YES];

        [self presentModalViewController:mailComposer animated:YES];
    }
}

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

    NSLog (@"mail finished"); // NEVER REACHES THIS POINT.
}
4

3 回答 3

4

你可以替换这一行:

[self dismissModalViewControllerAnimated:YES];

使用以下行:

[controller dismissModalViewControllerAnimated:YES];
于 2012-01-04T14:00:58.320 回答
3

MFMailComposeViewController类继承自UINavigationController,因此它的委托属性是类的导航控制器“部分”的“委托”。要处理特定的邮件编写器委托方法,您需要将对象设置为mailComposeDelegate属性:

mailComposer.mailComposeDelegate = self;
于 2011-12-30T14:29:04.263 回答
0

斯威夫特 5.0:

如果你实现了 MFMailComposeViewControllerDelegate 协议,你只需要在 ViewController 中包含以下函数:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) 
{
   controller.dismiss(animated: true, completion: nil)
}

这个函数为你处理一切。如果用户发送电子邮件,视图会自动消失。任何进一步的信息: mailComposeController

于 2019-09-07T21:59:35.937 回答