Невозможно отклонить почтовый композитор с помощью dismiss (animated: true, completion: nil), а dismissViewControllerAnimated не подходит как опция

Я импортировал MessageUI и создал расширение для включения MFMailComposeViewControllerDelegate, которое включает dismiss (animated: true, completion: nil), и это не закрывает VC, который появляется для отправки сообщения, однако это единственный вариант, который появляется при вводе увольнять. Я не могу сказать, требуется ли это для новой версии Swift, поскольку все другие примеры показывают dismissViewControllerAnimated. Не уверен, что мне не хватает?

Код кнопки действия

    @IBAction func sendTapped(_ sender: UIButton) {

    let toRecipient = ["\(Constants.SubmitFeedback.feedbackEmail)"]

    let mc = MFMailComposeViewController()
    mc.mailComposeDelegate = self

    mc.setToRecipients(toRecipient)
    mc.setSubject("Feedback for Gallery App")

    mc.setMessageBody("Name: \(String(describing: nameTextField.text!)) \nEmail: \(String(describing: emailTextField.text!)) \n\nMessage: \n\(String(describing: messageTextField.text!))", isHTML: false)

    self.present(mc, animated: true, completion: nil)

}

Расширение с командой "отклонить"

extension FeedViewController: MFMailComposeViewControllerDelegate {

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    switch result.rawValue {
    case MFMailComposeResult.cancelled.rawValue:
        print("Cancelled")
    case MFMailComposeResult.failed.rawValue:
        print("Failed")
    case MFMailComposeResult.saved.rawValue:
        print("Saved")
    case MFMailComposeResult.sent.rawValue:
        print("Sent")
    default:
        break
    }

    dismiss(animated: true, completion: nil)
}

}

person akash23a    schedule 22.12.2019    source источник
comment
controller.dismiss (анимировано: true, завершение: nil)   -  person glotcha    schedule 22.12.2019
comment
Я закончил удаление MFMailComposeViewControllerDelegate в качестве расширения и добавил его непосредственно в VC, и я смог изменить mc.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate 'на' mc.mailComposeDelegate = self ', и теперь он работает.   -  person akash23a    schedule 22.12.2019


Ответы (1)


из документации

вызовите этот метод на представленном контроллере представления

я уверен, что мы все совершили ту же ошибку в первый раз, когда использовали этот api :-)

person glotcha    schedule 22.12.2019
comment
Я попытался добавить префикс «контроллер» к команде увольнения, но ничего не сделал. Поскольку VC компоновщика почты появляется, я могу смахнуть вниз, но это не тот пользовательский интерфейс, который я ожидал бы либо после отправки электронного письма, либо после выхода из композитора. Он должен исчезнуть автоматически. Также Xcode заставил меня изменить mc.mailComposeDelegate = self на mc.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate 'думаете, что это как-то связано с этим? - person akash23a; 22.12.2019
comment
извините, я не знаком с MFMailComposeViewController. Если вы посмотрите документацию по классу, вы увидите controller.dismiss (animated: true, completion: nil) в примере кода, предоставленном для этого обратного вызова делегата. Я предлагаю вам внимательно прочитать документацию и посмотреть, не сделали ли вы что-то не так в своей настройке. - person glotcha; 22.12.2019