我意识到这个问题已被不完整地问到了,但我还没能找到问题的答案。
我有一个带静态单元格的UITableViewController。其中一个单元格用于打开Mail Composer视图,并在用户发送或取消电子邮件后通过委托将其关闭。我的问题是没有调用委托方法。这是我的代码:
class SideMenuTableViewController: UITableViewController, MFMailComposeViewControllerDelegate, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
mailCVP.delegate = self
mailCVP = configureMailComposeVC()
if MFMailComposeViewController.canSendMail() {
self.presentViewController(mailCVP, animated: true, completion: nil)
} else { //..// }
}
func configureMailComposeVC() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.setToRecipients(["momentosdetora@gmail.com"])
mailComposerVC.setSubject("Contacto Momentos de Tora")
return mailComposerVC
}
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
controller.dismissViewControllerAnimated(true, completion: nil)
}
任何人都可以发现我可能做错的事吗?
感谢。
答案 0 :(得分:6)
MFMailComposeViewController
是UINavigationController
的子类,它已具有delegate
属性来处理导航更改。
MFMailComposeViewController
还有另一个名为mailComposeDelegate
的属性,它是您要查找的属性。
此外,您应该在设置委托之前创建控制器。
答案 1 :(得分:4)
确保使用
controller.mailComposeDelegate = self
不是这个
controller.delegate = self
答案 2 :(得分:1)
mailCVP.delegate = self
mailCVP = configureMailComposeVC()
此代码设置委托,但随后创建一个新实例,该实例没有委托......
请注意,如果MFMailComposeViewController.canSendMail
返回false
,则创建VC实例也没有意义。
答案 3 :(得分:0)
首先使用
mailCVP.mailComposeDelegate = self
而不是
mailCVP.delegate = self
此外,在 Swift 3 的情况下,委托方法以某种方式更新,即:
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?){
controller.dismiss(animated: true, completion: nil)
}