2016-10-28 17 views
2

私はSwiftアプリケーションから電子メールを送信したいとうまく動作し、電子メールを送信します。MFMailComposeViewControllerを閉じるには?

それでも、電子メールを送信した後、レイアウトは終了しません。私は電子メールを送信した後にレイアウトを終了したい。また、[キャンセル]、[下書きを削除]または[下書き保存]ボタンを押すと、この動作が必要になります。

これは私が(ボタンを押した後)、電子メールを送信する必要があるコード:

@IBAction func btnSendEmailAction(_ sender: AnyObject) { 

    let composeVC = MFMailComposeViewController() 
    composeVC.mailComposeDelegate = self 

    composeVC.setToRecipients(["[email protected]"]) 
    composeVC.setSubject("Hello!") 
    composeVC.setMessageBody("Hello World!", isHTML: false) 

    self.present(composeVC, animated: true, completion: nil) 
} 

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

    switch result { 

    case MFMailComposeResult.cancelled: 
     controller.dismiss(animated: true, completion: nil) 
     break 

    case MFMailComposeResult.sent: 
     controller.dismiss(animated: true, completion: nil) 
     break 

    case MFMailComposeResult.failed: 
     controller.dismiss(animated: true, completion: nil) 
     break 

    default: 
     break 
    } 

    controller.dismiss(animated: true, completion: nil) 
} 

が、私はキャンセルまたは送信ボタンを押すと、レイアウトが終了しません。

私はこの問題に関する多くの質問があることを知っていますが、私はそれらの多くを見て、これはいくつかの組み合わせから得ることができるコードです。それらのほとんどはSwiftではなくObjectiveになっていることに注意してください(また、メソッドが存在しないこともあります)。

例:iPhone: How to Close MFMailComposeViewController?

が、私は自分のコードに何かが足りないのですか?下書き削除と下書きイベントを検出するにはどうすればよいですか?

ありがとうございます!

+0

あなたはすべてのケースでは、 'controller'を却下するつもりなら、なぜスイッチを取らないと、単に' controller.dismissを持っている(アニメーション:真、完了を:ゼロ) ' – Adrian

+0

@アドリアンはコントローラを却下しなかったので、私は別々に各イベントに焦点を当ててみました。 –

+0

@Anish웃いあなたはどういう意味ですか? –

答えて

5

スイフト3を使用していて、有効なデリゲートメソッドを使用していないようです。補正後のデリゲートメソッドはこれです:

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

     switch result { 
     case .cancelled: 
      break 
     case .saved: 
      break 
     case .sent: 
      break 
     case .failed: 
      break 

     } 

     controller.dismiss(animated: true, completion: nil) 
    } 
+0

あなたは正しい秒数で間違っています。 –

+0

代理人の方法が間違っています。 –

+0

最後に、[下書きを送信]または[下書きを保存]のキャンセルボタンがメールではなく、この2つのオプションをキャンセルすることに気付きました。ハード月曜日。あなたは正しい、代議員の方法は間違っていた。ありがとうございました!それは魅力のように機能します! –

関連する問題