【问题标题】:MFMailComposeViewController does not send email or dismissMFMailComposeViewController 不发送电子邮件或关闭
【发布时间】:2019-11-06 23:15:27
【问题描述】:

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

在这段代码中

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

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

【讨论】:

  • 是和不是。您希望这可以是私密的,这是对的!但它不可能。你不能通过说@objc private 来解决这个问题。很不幸。
【解决方案2】:

确保您的 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)

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2011-03-24
    • 2016-10-31
    • 2014-07-18
    • 1970-01-01
    相关资源
    最近更新 更多