MFMailComposeViewControllerDelegate未被调用

时间:2016-06-01 13:54:51

标签: ios swift mfmailcomposeviewcontroller

我意识到这个问题已被不完整地问到了,但我还没能找到问题的答案。

我有一个带静态单元格的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)
    }

任何人都可以发现我可能做错的事吗?

感谢。

4 个答案:

答案 0 :(得分:6)

MFMailComposeViewControllerUINavigationController的子类,它已具有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)
}