MFMailComposeViewController не отправляет электронную почту и не отклоняет - PullRequest
1 голос
/ 07 ноября 2019

Я использую MFMailComposeViewController в контроллере представления со следующим кодом:

if !MFMailComposeViewController.canSendMail() {
    return
}
let mailComposeViewController = MFMailComposeViewController()
mailComposeViewController.mailComposeDelegate = self
present(mailComposeViewController, animated: true)

И:

extension MyViewController : MFMailComposeViewControllerDelegate {
    private func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
}

MFMailComposeViewController отображается, как ожидается, но имеетследующее поведение:

  • Кнопка «Отмена» либо ничего не делает (если сообщение не было отредактировано), либо отображает лист действий «Удалить черновик» / «Сохранить черновик», ни один из параметров которого не отменяет MFMailComposeViewController
  • Кнопка отправки ничего не делает, независимо от того, заблокирована она или нет (набор получателей не установлен) или включена (набор получателей)
  • Вид можно отклонить, проведя пальцем вниз (новый мод iOS 13поведение)

Это Xcode 11.2, iOS 13.2, Swift 4.

Как это исправить?

1 Ответ

2 голосов
/ 07 ноября 2019

В этом коде

extension MyViewController : MFMailComposeViewControllerDelegate {
    private func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
}

Удалить ключевое слово private. Он скрывает метод от Какао так, что он никогда не будет вызван.

...