在发送邮件时,点击发送或取消按钮视图控制器停留在那里和应用程序停止。
// swift 2.2; xcode 7.3.1;
if( MFMailComposeViewController.canSendMail() ) {
print("Can send email.")
}
var subjectText = "Verification"
var toReceipients = ["[email protected]"]
// var msgBody = "Verified"
var mc:MFMailComposeViewController = MFMailComposeViewController()
mc.mailComposeDelegate = self
mc.setSubject(subjectText)
mc.setMessageBody("Verified", isHTML: false)
mc.setToRecipients(toReceipients)
self.presentViewController(mc, animated: true, completion: nil)
}
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
self.dismissViewControllerAnimated(true, completion: nil)
}
我想@rmaddy在他的评论中回答了你的问题,然而我会向你解释发生了什么。你试图解雇提出UIViewController
而不是MFMailComposeViewController
的MFMailComposeViewController
。
正如Apple在他的文件中指出:
邮件撰写视图控制器不会自动解除。当用户点击按钮发送电子邮件或取消界面时,邮件撰写视图控制器调用其委托的
mailComposeController:didFinishWithResult:error:
方法。您对该方法的实现必须显式地关闭视图控制器。
所以你需要以这种方式设置方法:
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
// Dismiss the mail compose view controller.
controller.dismissViewControllerAnimated(true, completion: nil)
}
我希望这对你有帮助。
Swift 4.0更新。 Swift 5.0更新。
请允许我在讨论中添加一些内容......
在Swift 4和5中,委托方法略有改变;因为它现在由你发布,不会有任何影响,也不会被调用。它发生在我身上,让我抓狂!
Xcode警告提示三个修复,但前两个可能会产生误导。这只是一个小小的修复......
这是为Swift 3,4和5修复的委托方法:
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
// Dismiss the mail compose view controller.
controller.dismiss(animated: true, completion: nil)
}
尽管如此,维克多的回答应该是正确/可接受的。
请享用!
有一个Switch语句为我控制它:
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
switch result.rawValue {
case MFMailComposeResult.cancelled.rawValue :
print("Cancelled")
case MFMailComposeResult.failed.rawValue :
print("Failed")
case MFMailComposeResult.saved.rawValue :
print("Saved")
case MFMailComposeResult.sent.rawValue :
print("Sent")
default: break
}
self.dismiss(animated: true, completion: nil)
}