点击发送或取消按钮后如何关闭邮件视图控制器

Par*_*man 9 ios swift mfmailcomposeviewcontroller

在发送邮件时,点击发送或取消按钮视图控制器停留在那里和应用程序停止.

// swift 2.2; xcode 7.3.1;

  if( MFMailComposeViewController.canSendMail() ) {
            print("Can send email.")
        }

        var subjectText = "Verification"
        var toReceipients = ["notorious.roman@gmail.com"]


        // 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)

    }
Run Code Online (Sandbox Code Playgroud)

Hel*_*ood 16

Swift 3.0更新. Swift 4.0更新.

请允许我在讨论中添加一些内容......

在Swift 3和4中,委托方法略有改变; 因为它现在由你发布,不会有任何影响,也不会被调用.它发生在我身上,让我抓狂!

Xcode警告提示三个修复,但前两个可能会产生误导.这只是一个小小的修复......

这是为Swift 3和4修复的委托方法:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {

        // Dismiss the mail compose view controller.
        controller.dismiss(animated: true, completion: nil)
    }
Run Code Online (Sandbox Code Playgroud)

尽管如此,维克多的回答应该是正确/可接受的.

请享用!


Vic*_*ler 14

我想@rmaddy在他的评论中回答了你的问题,然而我会向你解释发生了什么.你试图解雇UIViewControllerMFMailComposeViewController不存在的东西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)
}
Run Code Online (Sandbox Code Playgroud)

我希望这对你有帮助.