9

Dies ist ein Beispielcode:MFMailComposeViewController in Swift entlässt nicht

import UIKit 
import MessageUI 

class ViewController: UIViewController, MFMailComposeViewControllerDelegate { 

@IBAction func showEmail(sender : AnyObject) { 
    var emailTitle = "Test Email" 
    var messageBody = "This is a test email body" 
    var toRecipents = ["[email protected]"] 
    var mc: MFMailComposeViewController = MFMailComposeViewController() 
    mc.mailComposeDelegate = self 
    mc.setSubject(emailTitle) 
    mc.setMessageBody(messageBody, isHTML: false) 
    mc.setToRecipients(toRecipents) 

    self.presentViewController(mc, animated: true, completion: nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError) { 
    switch result.value { 
    case MFMailComposeResultCancelled.value: 
     NSLog("Mail cancelled") 
    case MFMailComposeResultSaved.value: 
     NSLog("Mail saved") 
    case MFMailComposeResultSent.value: 
     NSLog("Mail sent") 
    case MFMailComposeResultFailed.value: 
     NSLog("Mail sent failure: %@", [error.localizedDescription]) 
    default: 
     break 
    } 
    self.dismissModalViewControllerAnimated(true) 
    // self.dismissViewControllerAnimated(true, completion: nil) 
} 

} 

Wenn ich auf den Knopf drücken, um die Funktion showEmail ausgeführt wird, und erscheint das Formular für die E-Mail senden. Wenn ich auf "Senden" klicke, dann funktioniert alles einwandfrei - Mail wird gesendet, dann wird die Funktion mailComposeController ausgeführt. NSLog zeigt das Label "Mail gesendet" und der erste Bildschirm erscheint wieder.

Wenn ich im Dialogfeld von send mail bin, auf „Abbrechen“-Taste und dann den Dialog nicht verschwindet, Funktion mailComposeController nicht funktioniert, zwei Tasten - „Senden“ und „Abbrechen“, immer graue Farbe und so bleibt es.

Was falsch?

Antwort

2

Scheint ein Bug in iOS 8. Das gleiche Problem gibt es auch in Objective-C.

+0

Verdammt! :-) Ich habe schon Hunderte von verschiedenen Optionen durchgespielt! :-) –

+0

Bleibt dieser Fehler bestehen ?, Ich habe das gleiche Problem in Xcode6.0.1 – BaSha

+0

Der presentingViewController ist verantwortlich für die Ablehnung der presentedViewController, nicht Selbst – Yariv

3

Sie versuchen, self anstelle der MFMailComposeViewController (die nicht selbst ist) zu entlassen.

Replace:

self.dismissModalViewControllerAnimated(true) 

mit:

controller.dismissViewControllerAnimated(true, completion: nil) 

im Delegatmethode.

+0

Gerade versucht: ** controller.dismissViewControllerAnimated (true, Abschluss: null) ** und ** Controller .dismissModalViewControllerAnimated (true) ** - keine Änderung, MFMailCompose wird nicht abgelehnt :-( –

+4

Mein Problem ist ** didFinishWithResult ** nicht gefeuert. –

2

Fehler wurde behoben. Alles funktioniert wie in iOS erwartet 8.1+ und Xcode 6.1 und höher

Folgende Brände und funktioniert gut

extension MainViewController: MFMailComposeViewControllerDelegate { 
    func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) { 
     switch result.value { 
     case MFMailComposeResultCancelled.value: 
      NSLog("Mail cancelled") 
     case MFMailComposeResultSaved.value: 
      NSLog("Mail saved") 
     case MFMailComposeResultSent.value: 
      NSLog("Mail sent") 
     case MFMailComposeResultFailed.value: 
      NSLog("Mail sent failure: %@", [error.localizedDescription]) 
     default: 
      break 
     } 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 
} 
+1

es funktioniert nicht mehr in ios9.2 –