MFMailComposeViewController不发送电子邮件或关闭

问题描述 投票:1回答:1

我在具有以下代码的视图控制器中使用MFMailComposeViewController

if !MFMailComposeViewController.canSendMail() {
    return
}
let mailComposeViewController = MFMailComposeViewController()
mailComposeViewController.mailComposeDelegate = self
present(mailComposeViewController, animated: true)

和:

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

MFMailComposeViewController显示如预期,但具有以下行为:

  • 取消按钮要么不执行任何操作(如果尚未编辑消息),要么显示“删除草稿” /“保存草稿”操作表,没有一个选项可以忽略MFMailComposeViewController
  • 无论发送按钮是否已禁用(未设置收件人)或已启用(已设置收件人),什么都不做
  • 可以通过向下滑动视图来消除视图(新的iOS 13模态行为)

这是Xcode 11.2,iOS 13.2,Swift 4。

我该如何解决?

ios swift email ios13 mfmailcomposeviewcontroller
1个回答
2
投票

在此代码中

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

删除关键字private。它对Cocoa隐藏了该方法,因此它将永远不会被调用。


-1
投票

我认为您需要打开结果以检查所有案例并根据结果案例执行相关操作。

重要:您必须使您的ViewController为mailComposeDelegate

例如:==>yourMailComposerInstance.mailComposeDelegate = self其中self是您的托管ViewController等。

    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        dismiss(animated: true) {
            switch result {
            case .cancelled:
                print("Cancelled")
            case .saved:
                print("Saved")
            case .sent:
               print("Sent")
            case .failed:
               print("Failed.")
            @unknown default:
                print("Unknown")
    }
   }

 }


© www.soinside.com 2019 - 2024. All rights reserved.