Да, это работает, но срабатывает до закрытия представления. Я ищу после.
даю приложение, которое создает электронную почту и представляет ее в MFMailComposeViewController для отправки пользователем. Когда пользователь отправляет или отменяет его, я хочу, чтобы приложение ответило соответствующим сообщением на экране подтверждения.
Я могу составить электронное письмо, закрыть экран создания, и у меня есть имя segue в IB от представления перед составлением до представления подтверждения. Но я не могу заставить этот переход выполнить.
Итак, как я могу обновить текстовое сообщение в пункте назначения segue, а затем перейти к нему.
Поскольку я пытаюсь изучить Swift, мне очень интересно понять, как работает код, а не просто получить работающий код. Поэтому я действительно ценю любую помощь.
Рабочий процесс начинается с того, что пользователь снимает фотографию из приложения:
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
Который собирает все содержимое сообщения электронной почты и передает его:
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
И тогда это срабатывает, когда пользователь нажимает «Отправить» или «Отмена»
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
И вот тут я оказываюсь в тупике. Я могу получить доступ к MFMailComposeResult, и это правильно, но я не могу понять, как представить представление подтверждения, чтобы оно было доступно, когда составное представление выдвигается.