9

To jest przykładowy kod:MFMailComposeViewController w Swift nie odwołuje

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

} 

Gdy wciskam przycisk, funkcja showEmail jest wykonywany i pojawi się formularz do wysyłania wiadomości e-mail. Jeśli kliknę "Wyślij", wszystko działa poprawnie - poczta jest wysyłana, a następnie wykonywana jest funkcja mailComposeController. NSLog wyświetli etykietę "Poczta wysłana", a ekran początkowy pojawi się ponownie.

Jeśli jestem w oknie dialogowym wysyłania poczty, kliknij „Cancel” przycisk, a następnie dialog nie zniknie, funkcja mailComposeController nie działa, dwa przyciski - „Wyślij” i „Anuluj”, stając się szary kolor, a więc pozostaje.

Co jest nie tak?

Odpowiedz

2

Wydaje się być błędem w iOS 8. Ten sam problem występuje również w Objective-C.

+0

Cholera! :-) Już przeszedłem przez setki różnych opcji! :-) –

+0

Czy ten błąd nadal występuje ?, mam do czynienia z tym samym problemem w Xcode6.0.1 – BaSha

+0

PresentViewController jest odpowiedzialny za zwalnianie presentViewController, a nie self – Yariv

3

Próbujesz odrzucić self zamiast MFMailComposeViewController (która nie jest self).

wymienić:

self.dismissModalViewControllerAnimated(true) 

z:

controller.dismissViewControllerAnimated(true, completion: nil) 

w sposobie pełnomocnik.

+0

prostu próbowałem: ** controller.dismissViewControllerAnimated (prawda realizacji: nil) ** i ** kontroler .dismissModalViewControllerAnimated (true) ** - bez zmian, MFMailCompose nie odwołuje :-( –

+4

Mój problem jest ** didFinishWithResult ** nie został zwolniony –

2

Błąd został rozwiązany. Wszystko działa zgodnie z oczekiwaniami w iOS 8.1+ i Xcode 6.1+

Poniższe pożarów i działa dobrze

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

jego już nie działa w ios9.2 –

Powiązane problemy