3

在同一个视图控制器上,我们可以发送电子邮件或短信将信息发送给朋友。 应用中的短信完全有效。但是对于电子邮件,电子邮件应用程序会在我的应用程序中打开我要求写入的所有信息,但不可能通过推送取消来解除它,没有任何反应。 我试过mc.mailComposeDelegate = self或mc.delegate = self,MFMailComposeViewControllerDelegate也在顶部。 我在网上查找了一切,我没有找到任何解释。 mailComposeController永远不会被调用! 你有什么想法吗?SWIFT - 未调用mailComposeDelegate:取消MFMailComposeViewController不起作用

class inviteAFriendViewController: UIViewController, MFMessageComposeViewControllerDelegate, MFMailComposeViewControllerDelegate { 

@IBAction func emailButtonDidTouch(sender: AnyObject) { 
    sendEmail() 
} 

func sendEmail() { 
    let emailTitle = "text" 
    let messageBody = "text" 
    let toRecipents = [""] 

    let mc = MFMailComposeViewController() 

    //mc.mailComposeDelegate = self 

    mc.delegate = self 

    mc.setSubject(emailTitle) 
    mc.setMessageBody(messageBody, isHTML: false) 
    mc.setToRecipients(toRecipents) 

    presentViewController(mc, animated: true, completion: nil) 
} 

func mailComposeController(controller2: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    switch result.rawValue { 
    case MFMailComposeResultCancelled.rawValue: 
     print("Mail cancelled") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    case MFMailComposeResultSaved.rawValue: 
     print("Mail saved") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    case MFMailComposeResultSent.rawValue: 
     print("Mail sent") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    case MFMailComposeResultFailed.rawValue: 
     print("Mail sent failure.") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    default: 
     break 
    } 
    controller2.dismissViewControllerAnimated(true, completion: nil) 
} 

回答

13

我得到它的工作没有任何问题,但我的委托方法看起来你有点不同:

func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError?) { 
    switch result.rawValue { 
    case MFMailComposeResultCancelled.rawValue: 
     print("Mail cancelled") 
    case MFMailComposeResultSaved.rawValue: 
     print("Mail saved") 
    case MFMailComposeResultSent.rawValue: 
     print("Mail sent") 
    case MFMailComposeResultFailed.rawValue: 
     print("Mail sent failure: %@", [error.localizedDescription]) 
    default: 
     break 
    } 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

,你可以尝试这一个。

而且你需要设置 mc.mailComposeDelegate = self 而不是 mc.delegate = self

+0

哦,我的上帝,它的作品,我不知道你是谁,但感谢你1000倍!祝你今天愉快! – Oscar

2

首先使用

mc.mailComposeDelegate = self 

代替

mc.delegate = self 

此外,在情况下,斯威夫特3 ,委托方法有点upd这是:

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