MFMailComposeViewController 委托未在 swift 4 上工作
MFMailComposeViewController delegate not working on swift 4
我正在尝试关闭 MFMailComposeViewController,但未触发委托。这似乎是一个常见问题,答案是相同的,但它们对我不起作用:(。我有一个按钮调用发送邮件的功能。我首先创建一个 csv 文件,然后创建 MFMailComposeViewController 并附上csv 文件发送到邮件。有时会发送邮件(之后邮件视图控制器不会关闭),取消按钮显示删除或保存草稿的选项,但之后没有任何反应。
按钮代码如下:
import UIKit
import MessageUI
class UserInfoViewController: UIViewController, MFMailComposeViewControllerDelegate {
@IBAction func uploadPressed(_ sender: Any) {
let contentsOfFile = "Name,ID,Age,Sex,Time,\n\(name),\(id),\(age),\(sex),\(time)"
let data = contentsOfFile.data(using: String.Encoding.utf8, allowLossyConversion: false)
if let content = data {
print("NSData: \(content)")
}
func configuredMailComposeViewController() -> MFMailComposeViewController {
let emailController = MFMailComposeViewController()
//emailController.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate
emailController.mailComposeDelegate = self
emailController.setToRecipients([""])
emailController.setSubject("CSV File")
emailController.setMessageBody("", isHTML: false)
emailController.addAttachmentData(data!, mimeType: "text/csv", fileName: "registro.csv")
return emailController
}
let emailViewController = configuredMailComposeViewController()
if MFMailComposeViewController.canSendMail() {
self.present(emailViewController, animated: true, completion: nil)
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
print("Delegate worked!")
controller.dismiss(animated: true, completion: nil)
}
}
}
非常感谢您。
您的问题是由于将委托方法放在另一个方法中引起的。你不能那样做。委托函数需要位于 class 的顶层。只需将 mailComposeController(_:didFinishWith:error:)
函数移出 uploadPressed
函数即可。
我正在尝试关闭 MFMailComposeViewController,但未触发委托。这似乎是一个常见问题,答案是相同的,但它们对我不起作用:(。我有一个按钮调用发送邮件的功能。我首先创建一个 csv 文件,然后创建 MFMailComposeViewController 并附上csv 文件发送到邮件。有时会发送邮件(之后邮件视图控制器不会关闭),取消按钮显示删除或保存草稿的选项,但之后没有任何反应。
按钮代码如下:
import UIKit
import MessageUI
class UserInfoViewController: UIViewController, MFMailComposeViewControllerDelegate {
@IBAction func uploadPressed(_ sender: Any) {
let contentsOfFile = "Name,ID,Age,Sex,Time,\n\(name),\(id),\(age),\(sex),\(time)"
let data = contentsOfFile.data(using: String.Encoding.utf8, allowLossyConversion: false)
if let content = data {
print("NSData: \(content)")
}
func configuredMailComposeViewController() -> MFMailComposeViewController {
let emailController = MFMailComposeViewController()
//emailController.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate
emailController.mailComposeDelegate = self
emailController.setToRecipients([""])
emailController.setSubject("CSV File")
emailController.setMessageBody("", isHTML: false)
emailController.addAttachmentData(data!, mimeType: "text/csv", fileName: "registro.csv")
return emailController
}
let emailViewController = configuredMailComposeViewController()
if MFMailComposeViewController.canSendMail() {
self.present(emailViewController, animated: true, completion: nil)
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
print("Delegate worked!")
controller.dismiss(animated: true, completion: nil)
}
}
}
非常感谢您。
您的问题是由于将委托方法放在另一个方法中引起的。你不能那样做。委托函数需要位于 class 的顶层。只需将 mailComposeController(_:didFinishWith:error:)
函数移出 uploadPressed
函数即可。