MFMailComposeViewController 不发送电子邮件或关闭
Posted
技术标签:
【中文标题】MFMailComposeViewController 不发送电子邮件或关闭【英文标题】:MFMailComposeViewController does not send email or dismiss 【发布时间】: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。
我该如何解决这个问题?
【问题讨论】:
你确认委托方法被调用了吗? 【参考方案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 的子类。
你应该:
-
创建 UIViewController 子类(MailViewController 类:UIViewController)
添加 MFMailComposeViewController。
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)
【讨论】:
以上是关于MFMailComposeViewController 不发送电子邮件或关闭的主要内容,如果未能解决你的问题,请参考以下文章