Есть ли способ создать общий метод для электронной почты (как: - свяжитесь с нами в приложении) - PullRequest
0 голосов
/ 25 августа 2018

Я получаю сообщение об ошибке: - // Невозможно присвоить значение типа «UIViewController» для типа «MFMailComposeViewControllerDelegate?» //

и если я не назначаю делегата, я не могу вернуться после нажатия кнопки ОТМЕНА в сообщении VC.

Посмотрите этот код: - сейчас я делаю что-то вроде этого: -

extension UIViewController { 

func contactUs() {

    if MFMailComposeViewController.canSendMail() {

        mc.mailComposeDelegate = self

                    if let name = CurrentUser.name, let phoneNo = CurrentUser.phone {
                        mc.setMessageBody("\n\n\nThanks & Regards\n\(name)\n\(phoneNo)", isHTML: false)
                    }
                 mc.setSubject(emailTitle)
                 mc.setToRecipients(toRecipents)
                 self.present(mc, animated: true, completion: nil)      
       }
    }
}


extension ViewController:  MFMailComposeViewControllerDelegate {

func mailComposeController(_ controller:MFMailComposeViewController, didFinishWith result:MFMailComposeResult, error:Error?) {
    switch result {
    case .cancelled:
        print_debug("Mail cancelled")
    case .saved:
        print_debug("Mail saved")
    case .sent:
        print_debug("Mail sent")
    case .failed:
        print_debug("Mail sent failure: \(error?.localizedDescription ?? "Mail not sent")")
    default:
        break
    }
    self.dismiss(animated: true, completion: nil)
  }
}

1 Ответ

0 голосов
/ 25 августа 2018

Привет, Vipul, вы получаете ошибку, потому что в своем коде вы присваиваете viewcontroller для себя, так что вам нужно просто ввести этот контроллер

mc.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate

это решит вашу проблему, и я также предлагаю вам предоставить реализацию по умолчанию для MFMailComposeViewControllerDelegate, как это

import MessageUI

extension MFMailComposeViewControllerDelegate {

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

        switch result {
        case .cancelled:
            print_debug("Mail cancelled")
        case .saved:
            print_debug("Mail saved")
        case .sent:
            print_debug("Mail sent")
        case .failed:
            print_debug("Mail sent failure: \(error?.localizedDescription ?? "Mail not sent")")
        default:
            break
        }
        controller.dismiss(animated: true, completion: nil)

    }

}

и вам не нужно устанавливать mc.mailComposeDelegate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...