3

同じviewcontrollerで、友人に情報を送信するための電子メールまたはテキストメッセージを送信できます。 アプリ内のテキストメッセージは完全に機能します。しかし電子メールの場合、電子メールアプリは、私が書くように頼まれたすべての情報で私のアプリの中で開きますが、キャンセルを押すことによってそれを却下することは不可能です、何も起こりません。 mc.mailComposeDelegate = selfまたはmc.delegate = selfを試してみました。また、MFMailComposeViewControllerDelegateも先頭にあります。 私はインターネット上のすべてを見て、私は何の説明も見つかりませんでした。 mailComposeControllerは決して呼び出されません! ご存知ですか?SWIFT - mailComposeDelegateが呼び出されていない:MFMailComposeViewControllerのキャンセルが機能しない

class inviteAFriendViewController: UIViewController, MFMessageComposeViewControllerDelegate, MFMailComposeViewControllerDelegate { 

@IBAction func emailButtonDidTouch(sender: AnyObject) { 
    sendEmail() 
} 

func sendEmail() { 
    let emailTitle = "text" 
    let messageBody = "text" 
    let toRecipents = [""] 

    let mc = MFMailComposeViewController() 

    //mc.mailComposeDelegate = self 

    mc.delegate = self 

    mc.setSubject(emailTitle) 
    mc.setMessageBody(messageBody, isHTML: false) 
    mc.setToRecipients(toRecipents) 

    presentViewController(mc, animated: true, completion: nil) 
} 

func mailComposeController(controller2: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    switch result.rawValue { 
    case MFMailComposeResultCancelled.rawValue: 
     print("Mail cancelled") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    case MFMailComposeResultSaved.rawValue: 
     print("Mail saved") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    case MFMailComposeResultSent.rawValue: 
     print("Mail sent") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    case MFMailComposeResultFailed.rawValue: 
     print("Mail sent failure.") 
     controller2.dismissViewControllerAnimated(true, completion: nil) 
    default: 
     break 
    } 
    controller2.dismissViewControllerAnimated(true, completion: nil) 
} 

答えて

13

私はそれが何の問題もなく働いて得たが、私のデリゲートメソッドはあなたに少し異なります:

func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError?) { 
    switch result.rawValue { 
    case MFMailComposeResultCancelled.rawValue: 
     print("Mail cancelled") 
    case MFMailComposeResultSaved.rawValue: 
     print("Mail saved") 
    case MFMailComposeResultSent.rawValue: 
     print("Mail sent") 
    case MFMailComposeResultFailed.rawValue: 
     print("Mail sent failure: %@", [error.localizedDescription]) 
    default: 
     break 
    } 
    self.dismissViewControllerAnimated(true, completion: nil) 
} 

あなたは、このいずれかを試してください。

そして、あなたはすべての mc.delegate = self

+0

ああ私の神それは動作しますが、私はあなたが誰か知っているが1000回ありがとう!良い一日を! – Oscar

2

まずの場合スウィフト3で、代わりにまた

mc.delegate = self 

mc.mailComposeDelegate = self 

を使用 mc.mailComposeDelegate = self ないを設定する必要があります、代理メソッドは何とかupdですこれは:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?){ 
    controller.dismiss(animated: true, completion: nil) 
} 
関連する問題