Swift 3 Como exibir uma tela de confirmação com base na tela de email do MFMailComposeResult
Estou criando um aplicativo que constrói um email e o apresenta em um MFMailComposeViewController para o usuário enviar. Quando o usuário envia ou cancela, desejo que o aplicativo responda com uma mensagem na tela de confirmação apropriada.
Consigo compor o email, descartar a tela de composição e tenho um nome nomeado no IB da visualização de pré-composição à visualização de confirmação. Mas não consigo executar o que segue.
Então, como posso atualizar uma mensagem de texto no destino segue e depois segue para ele.
Como estou tentando aprender o Swift, estou muito interessado em entender como o código funciona, não apenas em obter o código que funciona. Então, eu realmente aprecio qualquer ajuda.
O fluxo de trabalho começa com o usuário tirando uma foto do aplicativo:
func snapPhoto(){
if let cameraConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo) {
sessionOutput.captureStillImageAsynchronously(from: cameraConnection, completionHandler: { buffer, error in
let myMessage = self.buildEmail()
let myJpg = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
let mapSnap = (self.myMap == nil) ? nil : UIImagePNGRepresentation(self.myMap!)
let mail = self.setupMail(to: myMessage.to, subject: myMessage.subject, body: myMessage.body, myJpg: myJpg!, mapSnap: mapSnap)
self.presentMailComposer(mail: mail)
}) // close completionHandler
} // close if let cameraConnection
} // close func snapPhoto
Que reúne todo o conteúdo da mensagem de email e o passa para:
func presentMailComposer(mail : MFMailComposeViewController) {
if MFMailComposeViewController.,canSendMail() {
self.present(mail, animated: true, completion: nil)
} else {
let sendMailErrorAlert = UIAlertController.init(title: "Uh oh!", message: "Unable to send email.", preferredStyle: .alert)
self.present(sendMailErrorAlert, animated: true, completion: nil)
} // close if
} // close presentEmailComposer
E isso é acionado quando o usuário toca em "Enviar" de "Cancelar"
public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
switch result.rawValue {
case MFMailComposeResult.cancelled.rawValue:
self.performSegue(withIdentifier: "afterEmail", sender: self)
print("Mail cancelled")
case MFMailComposeResult.saved.rawValue:
print("Mail saved")
case MFMailComposeResult.sent.rawValue:
print("Mail sent")
case MFMailComposeResult.failed.rawValue:
print("Mail sent failure: %@", [error!.localizedDescription])
default:
break
}
controller.dismiss(animated: true, completion: nil)
} // close mailCompose
E é aqui que me encontro perplexo. Posso acessar o MFMailComposeResult, e está correto, mas não consigo descobrir como apresentar a exibição de confirmação, para que fique disponível quando a exibição de composição deslizar.