MFMailComposeViewController不发送电子邮件或关闭



我在视图控制器中使用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。

我该怎么解决这个问题?

在此代码中

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

删除关键字private。它向Cocoa隐藏该方法,这样就永远不会调用它。

确保您的类MyViewController不是MFMailComposeViewController的子类。

您应该:

  1. 创建UIViewController子类(类MailViewController:UIViewController(
  2. 添加MFMailComposeViewController
  3. MailViewController:MFMailComposeViewControllerDelegate

或者:

直接从另一个UIViewController配置MFMailComposeViewController((。例如:

let mailComposeVC = MFMailComposeViewController()
mailComposeVC.mailComposeDelegate = self
mailComposeVC.setToRecipients([recipient])
mailComposeVC.setSubject(subject)
mailComposeVC.setMessageBody(body, isHTML: false)
present(mailComposeVC, animated: true, completion: nil)

相关内容

最新更新