2016-08-09 70 views
3

Ich versuche MFMailComposeViewController zu implementieren, wenn die E-Mails aus meiner Anwendung gesendet werden. Das Problem ist, dass nach dem Präsentieren MFMailComposeViewController es nicht durch "Abbrechen" oder "Senden" Tasten abgewiesen wird, nur ein wenig nach oben scrollt. HierMFMailComposeViewController nicht entlassen

ist das präsentierende davon:

func mailButtonDidPressed { 
     let emailTitle = "Test email" 
     let messageBody = "some body bla bla bla" 
     let toRecipents = "[email protected]" 

     let emailComposer = MFMailComposeViewController() 
     emailComposer.setSubject(emailTitle) 
     emailComposer.setMessageBody(messageBody, isHTML: false) 
     emailComposer.setToRecipients([toRecipents]) 
     emailComposer.mailComposeDelegate = self 
     self.presentViewController(emailComposer, animated: true, completion: nil) 
    } 

und Entlassung von Delegierten Code:

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    switch (result) { 
    case MFMailComposeResultSent: 
     print("You sent the email.") 
     break 
    case MFMailComposeResultSaved: 
     print("You saved a draft of this email") 
     break 
    case MFMailComposeResultCancelled: 
     print("You cancelled sending this email.") 
     break 
    case MFMailComposeResultFailed: 
     print("Mail failed: An error occurred when trying to compose this email") 
     break 
    default: 
     print("An error occurred when trying to compose this email") 
     break 
    } 

    controller.dismissViewControllerAnimated(true, completion: nil) 
} 

Ich habe durch die Stackoverflow und andere Dienste wie diese gesurft und keine Antwort finden konnten.

+0

tut ** didFinishWithResult ** heißt ..? Ich meine, haben Sie Delegierten hinzugefügt? – Gokul

+0

Ja, es heißt –

+1

Ich habe Ihren Code getestet. Es funktioniert gut. –

Antwort

0

Unter der Annahme, mailComposeControllermailComposeController ist eine Funktion von der gleichen Klasse wie mailButtonDidPressedmailButtonDidPressed, sollte es seine Instanz sein, die die MFMailComposeViewController entlassen, so

self.dismissViewControllerAnimated(true, completion: nil)

statt

controller.dismissViewControllerAnimated(true, completion: nil)

+0

Ich habe genau das gleiche Ergebnis –

0

Sie didn‘ t fügen Sie den Delegierten hinzu:

emailComposer.delegate = self 

Ihr Code sollte wie folgt sein:

func mailButtonDidPressed { 
     ... 

     let emailComposer = MFMailComposeViewController() 
     emailComposer.delegate = self 

... 
    } 
+1

'emailComposer.mailComposeDelegate = selbst 'Ich kann dies in OPs-Code sehen. – GoodSp33d

+0

Ich bin mir nicht sicher, 100% aber es ist nicht das gleiche – Chlebta

+0

emailComposer.delegate = selbst dieser Delegat sollte UINavigationControllerDelegate entsprechen, sind sicher, dass ich dieses Protokoll in meinem View-Controller entsprechen sollte? –

2

Wenn jemand hat dieses Problem in Swift 3,0, ich denke, es könnte zwei Methoden für MFMailComposeViewController sein, die auf die richtige Methode ähnlich aussehen.

Stellen Sie sicher, dass Sie diese Methode verwenden

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 
     controller.dismiss(animated: true, completion: nil) 
    } 
2

für eine schnelle 3 Sie

 composer.mailComposeDelegate = self as MFMailComposeViewControllerDelegate 
0

Ich löste das Schreiben auf diese Weise die completion auf diese Weise zu entfernen hinzufügen:

extension UIViewController: MFMailComposeViewControllerDelegate { 

    func sendEmail() { 
     //send email 
    } 

    public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 
     controller.dismiss(animated: true) 
    } 

} 
0

Ich hatte dieses Problem und die Antwort war sehr einfach. Stellen Sie sicher,

MFMailComposeViewControllerDelegate 

in der Spitze enthalten, wie wenn Sie Ihre Erbschaften sind Auflistung, und dann sind die Sachen aus den anderen Antworten.