MFMailComposeViewController не отклоняет — Swift, Xcode

#ios #swift #xcode #mfmailcomposeviewcontroller

#iOS #swift #xcode #mfmailcomposeviewcontroller

Вопрос:

В настоящее время я пытаюсь реализовать MFMailComposeViewController . Все работает нормально, за исключением того, что после отправки электронного письма или нажатия MFMailComposeViewController кнопки отмена не отключается. Я просмотрел похожие потоки StackOverflow и попытался реализовать эти решения, но они не решили мою проблему. Я чувствую, что проблема может заключаться не в func mailComposeController , а в остальной части моего кода. Любая помощь будет принята с благодарностью.

Мой код:

    if MFMailComposeViewController.canSendMail() {
        let vc = MFMailComposeViewController()
        vc.delegate = self
        vc.mailComposeDelegate = self
        vc.setSubject("Contact Us/Feedback")
        vc.setToRecipients(["test@gmail.com"])
        present(vc, animated: true)
    }
    else {
        if let url = URL(string: "https://www.google.com") {
        let safariVC = SFSafariViewController(url: url)
                
        present(safariVC, animated: true, completion: nil)
    }
        }

    func mailComposeController(controller: MFMailComposeViewController,
                               didFinishWithResult result: MFMailComposeResult, error: NSError?) {
      
        // Dismiss the mail compose view controller.
        controller.dismiss(animated: true, completion: nil)
    }
}
 

Спасибо!

Ответ №1:

Изменить

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

Для

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

Комментарии:

1. Кроме того, удалите vc.delegate = self , поскольку он ничего не делает.

2. Привет, Мэтт, я внедрил это редактирование, однако оно не решает мою проблему. MFMailComposeViewController по-прежнему не отключается. Я также удалил vc.delegate = self Спасибо

3. О, и возьмите весь этот метод, включая обе фигурные скобки, вырежьте его и вставьте на верхний уровень объявления класса. Вы написали его внутри другого метода, где он никогда не может быть вызван.