SWIFT - 没有调用mailComposeDelegate:取消MFMailComposeViewController不起作用

时间:2016-05-15 14:33:00

标签: swift delegates mfmailcomposeviewcontroller mfmailcomposer

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

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)
}

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

首先使用

mc.mailComposeDelegate = self

而不是

mc.delegate = self

此外,在 Swift 3 的情况下,委托方法以某种方式更新,即:

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

答案 2 :(得分:0)

对于 Swift 4

$(function() {
  $('#count_paxx').on('change', function() {
    $('#demo_paxx').text($(this).val());
  })
});