Swift在用户从MFMailComposeViewController发送电子邮件后显示新视图

Swift在用户从MFMailComposeViewController发送电子邮件后显示新视图,swift,email,segue,transition,Swift,Email,Segue,Transition,目标:在用户从MFMailComposeViewController单击“发送”后,关闭compose视图,并在其后面显示确认视图 我通过以下用户点击创建了电子邮件生成器: let emailComposer = EmailComposer() @IBAction func ok(_ sender: UIButton) { let confirguredEmailComposer = emailComposer.configuredMailComposeViewController(

目标:在用户从MFMailComposeViewController单击“发送”后,关闭compose视图,并在其后面显示确认视图

我通过以下用户点击创建了电子邮件生成器:

let emailComposer = EmailComposer()

@IBAction func ok(_ sender: UIButton) {

    let confirguredEmailComposer = emailComposer.configuredMailComposeViewController(to: ["self@self.com"], subject: "Testing", body: "Testy test testing")

    if emailComposer.canSendMail(){
        present(confirguredEmailComposer, animated: true, completion: nil)
    } else {
        showSendMailError(title: "Email Error", message: "That didn't work out so well")
    }

}
EmailComposer类有一个委托函数,可以正确地取消组合视图并捕获结果:

class EmailComposer: NSObject, MFMailComposeViewControllerDelegate {
    func canSendMail() -> Bool {
        return MFMailComposeViewController.canSendMail()
    } // close func
    func configuredMailComposeViewController(to: [String], subject: String, body: String) -> MFMailComposeViewController {
        let mailComposerVC = MFMailComposeViewController()
        mailComposerVC.mailComposeDelegate = self
        mailComposerVC.setToRecipients(to)
        mailComposerVC.setSubject(subject)
        mailComposerVC.setMessageBody(body, isHTML: true)
        return mailComposerVC
    } // close func
    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true) {
            switch result {
            case .cancelled:
                print ("Zapp Canceled")
            case .saved:
                print ("Your email has been saved to send later")
            case .sent:
                print ("Zapp Sent!")
            case .failed:
                print ("Mail sent failure: \([error!.localizedDescription])")
            } // close switch 
        } // close controller.dismiss completion handler
    } // close func
} // close class
我不知道用户发送电子邮件后如何显示确认视图

另外,从EmailComposer的委托方法内部还是从创建EmailComposer实例的视图控制器启动转换更好


最后,在IB中创建一个segue并使用它来执行转换,还是在代码中完成所有转换,或者这仅仅是个人喜好的问题?

您唯一的选择是在解除邮件编写器后从委托方法显示它。您应该将MFMailComposeViewController子类化,而不是NSObject,并创建一个方便的初始值设定项,而不是配置的MailCOMPOSEVIEWCONTROLLER方法,是的,这比我拥有的要优雅得多。谢谢现在转换到确认视图,这样当撰写视图滑开时,确认视图已经在后面了,怎么样?rmady,谢谢!关于从委托函数以编程方式执行转换的任何提示?@niblettes欢迎您。请编辑您的问题并尽量使其更清楚。添加您的实际代码,以及您试图如何使用标识符显示新的视图控制器或performSegue,以及哪些代码不起作用