2016-05-15 12 views
5

メールを送信中に、送信またはキャンセルボタンをクリックした後、ビューコントローラがそこに留まり、アプリが停止します。メールを送信中に、送信ボタンまたはキャンセルボタンをタップした後にメールビューコントローラを閉じる方法

// swift 2.2; xcode 7.3.1;

if(MFMailComposeViewController.canSendMail()) { 
      print("Can send email.") 
     } 

     var subjectText = "Verification" 
     var toReceipients = ["[email protected]"] 


     // var msgBody = "Verified" 


     var mc:MFMailComposeViewController = MFMailComposeViewController() 
     mc.mailComposeDelegate = self 

     mc.setSubject(subjectText) 
     mc.setMessageBody("Verified", isHTML: false) 

     mc.setToRecipients(toReceipients) 
     self.presentViewController(mc, animated: true, completion: nil) 



    } 

    func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 



     self.dismissViewControllerAnimated(true, completion: nil) 

    } 
+0

コール 'dismissViewControllerAnimated'。 – rmaddy

答えて

6

@rmaddyはあなたの質問に答えますが、何が起こっているのかを説明します。 MFMailComposeViewControllerが表示されているUIViewControllerを却下しようとしています。MFMailComposeViewControllerではありません。

Appleとして彼の文書で指定します。

メールコンビューコントローラは自動的に却下されていません。ユーザがボタンをタップして電子メールを送信するか、またはインタフェースをキャンセルすると、メール作成ビューコントローラはその代理人のmailComposeController:didFinishWithResult:error:メソッドを呼び出します。そのメソッドを実装するには、View Controllerを明示的に終了する必要があります。

ですから、このような方法でメソッドを設定する必要があります。

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 

    // Dismiss the mail compose view controller. 
    controller.dismissViewControllerAnimated(true, completion: nil) 
} 

私は、これはあなたを助ける願っています。

+0

それは働いた!ありがとうございます –

13

スウィフト3.0アップデート。 Swift 4.0アップデート。

若干変更デリゲートメソッドスウィフト3では

と4 ...私は議論に何かを追加することを許可します。 あなたが今投稿したので、何の効果もなく、呼び出されません。それは私に起こった、私を夢中にさせた!

Xcodeの警告には3つの修正が提案されていますが、最初の2つは誤解を招く可能性があります。それはちょうど小さな修正だ...

はここスウィフト3と4のための固定デリゲートメソッドです:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 

     // Dismiss the mail compose view controller. 
     controller.dismiss(animated: true, completion: nil) 
    } 

はまだ、ビクターの答えは正しい/ 1を受け入れられるべきです。

お楽しみください!

+0

違いは、関数宣言のアンダーバーのようです。 –

3

は私のためにそれを制御するスイッチステートメントを持っていたさ: `controller`、ない` self`上

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 

    switch result.rawValue { 
    case MFMailComposeResult.cancelled.rawValue : 
     print("Cancelled") 

    case MFMailComposeResult.failed.rawValue : 
     print("Failed") 

    case MFMailComposeResult.saved.rawValue : 
     print("Saved") 

    case MFMailComposeResult.sent.rawValue : 
     print("Sent") 



    default: break 


    } 

    self.dismiss(animated: true, completion: nil) 

} 
関連する問題