9

Si tratta di codice di esempio:MFMailComposeViewController a Swift non respingere

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) 
} 

} 

Quando premo il pulsante, la funzione showemail viene eseguito e viene visualizzato il form per inviare e-mail. Se faccio clic su "Invia", quindi tutto funziona correttamente - viene inviata la posta, quindi viene eseguita la funzione mailComposeController. NSLog visualizza l'etichetta "Posta inviata" e la schermata iniziale riappare.

Se sono nella finestra di dialogo di posta inviare, cliccare "Annulla" pulsante, quindi il dialogo non scompare, la funzione mailComposeController non funziona, due pulsanti - "Send" e "Annulla", divenendo colore grigio e così rimane.

Cosa c'è che non va?

risposta

2

Sembra un bug in iOS 8. Lo stesso problema esiste anche in Objective-C.

+0

Dannazione :-) Ho già provato centinaia di opzioni diverse! :-) –

+0

Questo bug persiste ?, sto affrontando lo stesso problema in Xcode6.0.1 – BaSha

+0

Il presentViewViewer è il responsabile di chiudere il ViewController presentato, non auto – Yariv

3

Stai cercando di eliminare self anziché MFMailComposeViewController (che non è auto).

Sostituire:

self.dismissModalViewControllerAnimated(true) 

con:

controller.dismissViewControllerAnimated(true, completion: nil) 

nel metodo delegato.

+0

Appena provato: ** controller.dismissViewControllerAnimated (vero, completo: nil) ** e ** regolatore .dismissModalViewControllerAnimated (true) ** - nessuna modifica, MFMailCompose non viene eliminato :-( –

+4

Il mio problema è ** didFinishWithResult ** non attivato. –

2

Il bug è stato risolto. Tutto funziona come previsto in iOS 8.1+ e Xcode 6.1+

I seguenti incendi e funziona bene

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

non funziona più in ios9.2 –