Кнопка возврата MFMailComposeViewController и отправки не работает

Я попытался использовать MFMailComposeViewController для отправки электронной почты в своем приложении.

let email = "..."

let mailComposer = MFMailComposeViewController()

mailComposer.mailComposeDelegate = self                
mailComposer.setToRecipients([email])

self.navigationController?.present(mailComposer, animated: true)

После запуска моего приложения отображается экран композитора, но кнопки cancel и send не отображаются. Я пробовал много возможных решений, например, изменить tintColor в обоих навигационных контроллерах. Например:

mailComposer.navigationBar.tintColor = .red

Но "проблема" осталась.

Любые идеи?


person maclacerda    schedule 22.06.2018    source источник
comment
попробуйте с present(mailComposer, animated: true) вместо self.navigationController?.present(mailComposer, animated: true)   -  person Anbu.Karthik    schedule 22.06.2018
comment
Возможный дубликат MFMailComposeViewController, Swift 4, Xcode 9   -  person Hardik Bar    schedule 22.06.2018
comment
Вы реализовали требуемый метод делегата?   -  person rmaddy    schedule 22.06.2018


Ответы (2)


Пожалуйста, попробуйте этот код

class TechSupportVC: UIViewController, MFMailComposeViewControllerDelegate {
    let composeVC = MFMailComposeViewController()

override func viewDidLoad() {
    super.viewDidLoad()

    composeVC.mailComposeDelegate = self
    composeVC.setToRecipients(["[email protected]"])
    composeVC.setSubject("My message")
}

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

@IBAction func sendPressed(_ sender: Any) {
    guard MFMailComposeViewController.canSendMail() else {
        showMailServiceErrorAlert()
        return
    }

    composeVC.setMessageBody("Test credentials: \(firstAndLastNameTextField.text!)\nPhone: \(numberTextField.text!)\n\n\(messageTextView.text!)", isHTML: false)

    self.present(composeVC, animated: true, completion: nil)
}
person Hardik Bar    schedule 22.06.2018

mailComposeDelegate должен быть унаследован от UIViewController. В другом случае закрытие MFMailComposeViewController не работает и вылетает. Похоже на баг Apple

person Vitalii Gozhenko    schedule 10.07.2019