MailComposer 未关闭
MailComposer not dismissed
我尝试使用 MailComposer。这是我使用的代码:
func setupMailer() {
if MFMailComposeViewController.canSendMail() {
emailController.mailComposeDelegate = self
emailController.setToRecipients([]) // set the email address
emailController.setSubject("BackgroundTask Test")
emailController.setMessageBody("Message body", isHTML: false)
}
}
然后当用户按下按钮时:
func buttonPressed(button: UIButton) {
debugPrint("buttonPressed", button)
let path = dirpath.appendingPathComponent(filename)
let data = NSData(contentsOfFile: path.path)
emailController.mailComposeDelegate = self
emailController.addAttachmentData(data! as Data, mimeType: "text/csv", fileName: filename)
present(emailController, animated: true, completion: nil)
}
解雇时:
@objc func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
debugPrint("mailComposeController dismiss")
controller.dismiss(animated: true, completion: nil)
}
发现如果是第一次按下按钮,无论我选择发送还是取消,邮件编辑器都正常工作。
但是,在我send/cancel之后,第2次以后,邮件编辑器不能被解雇。发送有可以发送电子邮件的响应,但邮件编写器界面永远不会关闭。
我发现函数func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)
在第一次触发后就不再触发了
有什么线索吗?
您不应该再次使用同一个 MFMailComposeViewController
实例..
试试这个
func setupMailer() {
if MFMailComposeViewController.canSendMail() {
emailController = MFMailComposeViewController.init()
emailController.mailComposeDelegate = self
emailController.setToRecipients([]) // set the email address
emailController.setSubject("BackgroundTask Test")
emailController.setMessageBody("Message body", isHTML: false)
}
}
好吧不知道你做错了什么。
我认为您正在使用 Swift。因此,我将向您解释如何实施它。步骤:
1) import MessagesUI
并添加代表 MFMailComposeViewControllerDelegate
2) 添加此功能:
func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["someone@somewhere.com"])
mailComposerVC.setSubject("Sending you an in-app e-mail...")
mailComposerVC.setMessageBody("Sending e-mail in-app is not so bad!", isHTML: false)
return mailComposerVC
}
3) 在按钮的IBAction中调用上述函数为:
let mailComposeViewController = configuredMailComposeViewController()
if MFMailComposeViewController.canSendMail() {
self.present(mailComposeViewController, animated: true, completion: nil)
} else {
// Show alert if user can't send mail
}
4) 最后实现委托方法:
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
对,关键是我重用了 emailController 实例。
func setupMailer() {
if MFMailComposeViewController.canSendMail() {
emailController = MFMailComposeViewController()
emailController.mailComposeDelegate = self
emailController.setToRecipients([]) // set the email address
emailController.setSubject("BackgroundTask Test")
emailController.setMessageBody("Message body", isHTML: false)
}
}
func buttonPressed(button: UIButton) {
debugPrint("buttonPressed", button)
let path = dirpath.appendingPathComponent(filename)
let data = NSData(contentsOfFile: path.path)
setupMailer()
emailController.addAttachmentData(data! as Data, mimeType: "text/csv", fileName: filename)
present(emailController, animated: true, completion: nil)
}
@objc func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
debugPrint("mailComposeController dismiss")
controller.dismiss(animated: true, completion: nil)
}
现在有效。
我尝试使用 MailComposer。这是我使用的代码:
func setupMailer() {
if MFMailComposeViewController.canSendMail() {
emailController.mailComposeDelegate = self
emailController.setToRecipients([]) // set the email address
emailController.setSubject("BackgroundTask Test")
emailController.setMessageBody("Message body", isHTML: false)
}
}
然后当用户按下按钮时:
func buttonPressed(button: UIButton) {
debugPrint("buttonPressed", button)
let path = dirpath.appendingPathComponent(filename)
let data = NSData(contentsOfFile: path.path)
emailController.mailComposeDelegate = self
emailController.addAttachmentData(data! as Data, mimeType: "text/csv", fileName: filename)
present(emailController, animated: true, completion: nil)
}
解雇时:
@objc func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
debugPrint("mailComposeController dismiss")
controller.dismiss(animated: true, completion: nil)
}
发现如果是第一次按下按钮,无论我选择发送还是取消,邮件编辑器都正常工作。
但是,在我send/cancel之后,第2次以后,邮件编辑器不能被解雇。发送有可以发送电子邮件的响应,但邮件编写器界面永远不会关闭。
我发现函数func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?)
在第一次触发后就不再触发了
有什么线索吗?
您不应该再次使用同一个 MFMailComposeViewController
实例..
试试这个
func setupMailer() {
if MFMailComposeViewController.canSendMail() {
emailController = MFMailComposeViewController.init()
emailController.mailComposeDelegate = self
emailController.setToRecipients([]) // set the email address
emailController.setSubject("BackgroundTask Test")
emailController.setMessageBody("Message body", isHTML: false)
}
}
好吧不知道你做错了什么。 我认为您正在使用 Swift。因此,我将向您解释如何实施它。步骤:
1) import MessagesUI
并添加代表 MFMailComposeViewControllerDelegate
2) 添加此功能:
func configuredMailComposeViewController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["someone@somewhere.com"])
mailComposerVC.setSubject("Sending you an in-app e-mail...")
mailComposerVC.setMessageBody("Sending e-mail in-app is not so bad!", isHTML: false)
return mailComposerVC
}
3) 在按钮的IBAction中调用上述函数为:
let mailComposeViewController = configuredMailComposeViewController()
if MFMailComposeViewController.canSendMail() {
self.present(mailComposeViewController, animated: true, completion: nil)
} else {
// Show alert if user can't send mail
}
4) 最后实现委托方法:
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
对,关键是我重用了 emailController 实例。
func setupMailer() {
if MFMailComposeViewController.canSendMail() {
emailController = MFMailComposeViewController()
emailController.mailComposeDelegate = self
emailController.setToRecipients([]) // set the email address
emailController.setSubject("BackgroundTask Test")
emailController.setMessageBody("Message body", isHTML: false)
}
}
func buttonPressed(button: UIButton) {
debugPrint("buttonPressed", button)
let path = dirpath.appendingPathComponent(filename)
let data = NSData(contentsOfFile: path.path)
setupMailer()
emailController.addAttachmentData(data! as Data, mimeType: "text/csv", fileName: filename)
present(emailController, animated: true, completion: nil)
}
@objc func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
debugPrint("mailComposeController dismiss")
controller.dismiss(animated: true, completion: nil)
}
现在有效。