MFMailComposeViewController不会被忽略

Pav*_*kyy 9 email iphone ios swift mfmailcomposeviewcontroller

我正试图MFMailComposeViewController在我的应用程序中发送电子邮件的情况下实施.问题是,在呈现MFMailComposeViewController它之后不会被"取消"或"发送"按钮解雇,只需稍微向上滚动即可.

以下是它的介绍:

func mailButtonDidPressed {
        let emailTitle = "Test email"
        let messageBody = "some body bla bla bla"
        let toRecipents = "email@gmail.com"

        let emailComposer = MFMailComposeViewController()
        emailComposer.setSubject(emailTitle)
        emailComposer.setMessageBody(messageBody, isHTML: false)
        emailComposer.setToRecipients([toRecipents])
        emailComposer.mailComposeDelegate = self
        self.presentViewController(emailComposer, animated: true, completion: nil)
    }
Run Code Online (Sandbox Code Playgroud)

并解雇委托代码:

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
    switch (result) {
    case MFMailComposeResultSent:
        print("You sent the email.")
        break
    case MFMailComposeResultSaved:
        print("You saved a draft of this email")
        break
    case MFMailComposeResultCancelled:
        print("You cancelled sending this email.")
        break
    case MFMailComposeResultFailed:
        print("Mail failed:  An error occurred when trying to compose this email")
        break
    default:
        print("An error occurred when trying to compose this email")
        break
    }

    controller.dismissViewControllerAnimated(true, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)

我浏览了StackOverflow和其他类似的服务,但找不到任何答案.

Ken*_*ler 9

斯威夫特 5

请记住添加两个代表:

emailComposer.mailComposeDelegate = self
emailComposer.delegate = self
Run Code Online (Sandbox Code Playgroud)

如果你只添加一个,它不会关闭。还要确保实现委托方法:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    dismiss(animated: true)
}
Run Code Online (Sandbox Code Playgroud)


Ter*_* Bu 7

如果有人在Swift 3.0中遇到此问题,我认为MFMailComposeViewController可能有两种方法看起来与CORRECT方法类似。

确保您正在使用此方法

  func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是我的解决方案,非常感谢, (3认同)

M.A*_*yed 5

对于快速3,您必须添加

        composer.mailComposeDelegate = self as MFMailComposeViewControllerDelegate
Run Code Online (Sandbox Code Playgroud)


Cra*_*Dev 5

我以这种方式解决了以这种方式删除的写作completion

extension UIViewController: MFMailComposeViewControllerDelegate {

    func sendEmail() {
      //send email
    }

    public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true)
    }

}
Run Code Online (Sandbox Code Playgroud)


SeN*_*NeO 0

假设mailComposeControllermailComposeController是 与 同一类的函数mailButtonDidPressedmailButtonDidPressed,应该是它的实例关闭 MFMailComposeViewController,所以

self.dismissViewControllerAnimated(true, completion: nil)

代替

controller.dismissViewControllerAnimated(true, completion: nil)