ios - 如何关闭 MFMailComposeViewController?

标签 ios swift email mfmailcomposeviewcontroller

我想从我的 Swift 应用程序发送一封电子邮件,它运行良好,它发送了电子邮件。

然而,在发送电子邮件后,布局并没有退出。我想在发送电子邮件后退出布局。当我按下取消、删除草稿或保存草稿按钮时,我也想要这种行为。

这是我必须发送电子邮件的代码(按下按钮后):

@IBAction func btnSendEmailAction(_ sender: AnyObject) {

    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self

    composeVC.setToRecipients(["mymail@mail.com"])
    composeVC.setSubject("Hello!")
    composeVC.setMessageBody("Hello World!", isHTML: false)

    self.present(composeVC, animated: true, completion: nil)
}

func mailComposeController(controller: MFMailComposeViewController,
                           didFinishWithResult result: MFMailComposeResult, error: NSError?) {

    switch result {

    case MFMailComposeResult.cancelled:
        controller.dismiss(animated: true, completion: nil)
        break

    case MFMailComposeResult.sent:
        controller.dismiss(animated: true, completion: nil)
        break

    case MFMailComposeResult.failed:
        controller.dismiss(animated: true, completion: nil)
        break

    default:
        break
    }

    controller.dismiss(animated: true, completion: nil)
}

但是当我按下“取消”或“发送”按钮时布局不会退出。

我知道有很多与此问题相关的问题,但我看了很多问题,这是我可以从其中一些问题中得到的代码。请注意,它们中的大多数都在 Objective 而不是 Swift 中(有时这些方法不存在)。

示例:iPhone: How to Close MFMailComposeViewController?

我的代码中是否遗漏了什么?如何检测移除草稿和保存草稿事件?

提前致谢!

最佳答案

看起来您正在使用 swift 3 而不是使用有效的委托(delegate)方法。更正的委托(delegate)方法是这样的:

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

        switch result {
        case .cancelled:
            break
        case .saved:
            break
        case .sent:
            break
        case .failed:
            break

        }

        dismiss(animated: true, completion: nil)
    }

关于ios - 如何关闭 MFMailComposeViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40305421/

相关文章:

Javax 邮件 : Unable to connect via pop3 (Command is not valid in this state)

ios - dequeueReusableCellWithIdentifier UITableView 两次

ios - Xcode 6 Swift WKWebView 键盘设置

ios - UITableViewCell 中的两个堆叠动态高度标签

iOS 7 : Get height for default UITableViewCell?

c++ - iOS 中未捕获来自 C++ 的“runtime_error”

ios - 如何迁移未存储的 Realm 对象?

android - 如何样式化 (CSS) 由 Android 应用程序 (Intent) 创建的电子邮件的 HTML 正文?

swift - 是否可以快速执行 '||' (Javascript)?

Android 电子邮件应用程序源代码