2016-06-01 30 views
2

Ich weiß, dass diese Frage ungenau gestellt wurde, aber ich konnte keine Antwort auf mein Problem finden.MFMailComposeViewControllerDelegate wird nicht aufgerufen

Ich habe einen UITableViewController mit statischen Zellen. Eine dieser Zellen soll eine Mail-Composer-Ansicht öffnen und sie über den Delegaten ablehnen, nachdem der Benutzer die E-Mail gesendet oder storniert hat. Mein Problem ist, dass die Delegate-Methode nicht aufgerufen wird. Hier ist mein Code:

class SideMenuTableViewController: UITableViewController, MFMailComposeViewControllerDelegate, UINavigationControllerDelegate { 

override func viewDidLoad() { 
     super.viewDidLoad() 

     mailCVP.delegate = self 
mailCVP = configureMailComposeVC() 
      if MFMailComposeViewController.canSendMail() { 
       self.presentViewController(mailCVP, animated: true, completion: nil) 
      } else { //..// } 
} 

func configureMailComposeVC() -> MFMailComposeViewController { 
     let mailComposerVC = MFMailComposeViewController() 
     mailComposerVC.setToRecipients(["[email protected]"]) 
      mailComposerVC.setSubject("Contacto Momentos de Tora") 

     return mailComposerVC 
    } 

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
     controller.dismissViewControllerAnimated(true, completion: nil) 
    } 

Kann jemand etwas entdecken, was ich falsch machen könnte?

Danke.

+0

andere Antworten finden Sie eine Lösung, aber wollte jemand helfen, dass mein spezielles Problem hatte. Im Grunde habe ich eine separate Klasse erstellt, um als Delegat zu fungieren, aber ich konnte nicht sicherstellen, dass Objekte dieser Klasse nicht vor dem Delegat-Aufruf freigegeben wurden. –

Antwort

1
mailCVP.delegate = self 
mailCVP = configureMailComposeVC() 

Dieser Code den Delegaten setzt aber erstellt dann eine neue Instanz, die nicht einen Delegierten hat ...

Beachten Sie, dass es auch bei der Schaffung der VC Beispiel, wenn MFMailComposeViewController.canSendMail kehrt false keinen Sinn.

5

MFMailComposeViewController ist eine Unterklasse von UINavigationController, die bereits eine delegate Eigenschaft hat, um Navigationsänderungen zu behandeln.

MFMailComposeViewController hat eine andere Eigenschaft namens mailComposeDelegate, die die Eigenschaft ist, die Sie suchen.

Außerdem sollten Sie den Controller erstellen, bevor Sie den Delegaten festlegen.

+0

Das ist richtige Antwort –

3

Stellen Sie sicher,

controller.mailComposeDelegate = self 

Nicht diese

controller.delegate = self 
0

allererst

verwenden verwenden
mailCVP.mailComposeDelegate = self 

statt

mailCVP.delegate = self 

Außerdem bei Swift 3 wird Delegatmethode irgendwie aktualisiert das ist:

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