9

Bu örnek kod reddedilmesine neden olmaz: MFMailComposeViewController

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

} 

Ben düğmeye showEmail infaz ve gönder e-posta için formu görünür işlevi itmek

. Eğer "Gönder" e tıklarsam, her şey yolunda giderse - posta gönderilir, daha sonra mailComposeController fonksiyonu çalıştırılır. NSLog, "Mail gönderildi" etiketini görüntüler ve ilk ekran yeniden belirir. olma, "İptal" "Gönder" ve - Ben gönderme posta iletişim kutusunda isem

, tıklayın fonksiyonu mailComposeController, iki düğme çalışmaz, düğmesine, ardından diyalog yok olmaz "İptal" gri renk ve böylece kalır.

Sorun nedir?

cevap

2

iOS 8'de hata görünüyor. Objective-C'de de aynı sorun var.

+0

Lanet! :-) Zaten yüzlerce farklı seçenekten geçtim! :-) –

+0

Bu hata hala devam ediyor mu ?, Ben aynı sorunla karşı karşıyayım Xcode6.0.1 – BaSha

+0

PresentViewController, beniope.2'de artık çalışmayan self – Yariv

3

MFMailComposeViewController (kendiliğinden değil) yerine self'u kapatmaya çalışıyorsunuz.

Değiştir:

self.dismissModalViewControllerAnimated(true) 

ile: temsilci yöntemde

controller.dismissViewControllerAnimated(true, completion: nil) 

.

+0

Sadece denenmiş çalışıyor edilir: ** controller.dismissViewControllerAnimated (true, tamamlama: nil) ** ve ** denetleyicisi .dismissModalViewControllerAnimated (true) ** - değişiklik yok MFMailCompose işten atılmadı :-( –

+4

Sorunum ** didFinishWithResult ** tetiklenmedi –

2

Hata giderildi. Her şey 8.1+ iOS beklendiği gibi çalışan ve Xcode 6.1 ve sonraki

aşağıdaki yangınları ve

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

değil, presentViewController'ı reddetmekten sorumludur –

İlgili konular