前提・実現したいこと
Swift+SpriteKitで2Dのゲームを作っています。
MessageUI.frameworkを使って
spritekitnodeをタップしたらMFMailComposeViewControllerでメールの作成画面を表示し、送信/下書き/キャンセルのいずれかが処理されたらメールの作成画面を閉じたいです。
現状はタップ->メール作成画面の表示までは実装できました。
発生している問題・エラーメッセージ
上記のメール処理の実行後も作成画面が消えず、そのままの画面(メール作成画面)になってしまいます。
該当のソースコード
swift
1 2 var mailViewController = MFMailComposeViewController() 3 4 @IBAction func sendMail() { 5 //メールを送信できるかチェック 6 if MFMailComposeViewController.canSendMail()==false { 7 print("Email Send Failed") 8 return 9 } 10 11 var mailViewController = MFMailComposeViewController() 12 var toRecipients = ["XXXX@gmail.sampledomainX"] 13 14 mailViewController.mailComposeDelegate = self 15 mailViewController.setSubject("メールの件名") 16 mailViewController.setToRecipients(toRecipients) //Toアドレスの表示 17 mailViewController.setMessageBody("メールの本文", isHTML: false) 18 var currentViewController : UIViewController? = UIApplication.shared.keyWindow?.rootViewController! 19 currentViewController?.present(mailViewController, animated: true, completion: nil) 20 } 21 22 func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 23 if result == MFMailComposeResult.cancelled { 24 print("メール送信がキャンセルされました") 25 } else if result == MFMailComposeResult.saved { 26 print("下書きとして保存されました") 27 } else if result == MFMailComposeResult.sent { 28 print("メール送信に成功しました") 29 } else if result == MFMailComposeResult.failed { 30 print("メール送信に失敗しました") 31 } 32 33 mailViewController.dismiss(animated: true, completion: nil) //閉じる 34 }
試したこと
StackOverflowにdismissで画面を消す方法が書いてありましたので試してみましたが出来ませんでした。
https://stackoverflow.com/questions/37366763/how-can-i-dismiss-a-viewcontroller-from-my-gamescene-swift
補足情報(FW/ツールのバージョンなど)
Xcode Version 10.1 (10B61)
Swift3
回答をいただいた後に編集しました。(回答箇所は未編集)
swift
1 2 var mailViewController = MFMailComposeViewController() 3 let currentViewController : UIViewController? = UIApplication.shared.keyWindow?.rootViewController! //<=追記 4 @IBAction func sendMail() { 5 //メールを送信できるかチェック 6 if MFMailComposeViewController.canSendMail()==false { 7 print("Email Send Failed") 8 return 9 } 10 11 var mailViewController = MFMailComposeViewController() 12 var toRecipients = ["XXXX@gmail.sampledomainX"] 13 14 mailViewController.mailComposeDelegate = self 15 mailViewController.setSubject("メールの件名") 16 mailViewController.setToRecipients(toRecipients) //Toアドレスの表示 17 mailViewController.setMessageBody("メールの本文", isHTML: false) 18 //var currentViewController : UIViewController? = UIApplication.shared.keyWindow?.rootViewController! 19 currentViewController?.present(mailViewController, animated: true, completion: nil) 20 } 21 22 func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 23 if result == MFMailComposeResult.cancelled { 24 print("メール送信がキャンセルされました") 25 } else if result == MFMailComposeResult.saved { 26 print("下書きとして保存されました") 27 } else if result == MFMailComposeResult.sent { 28 print("メール送信に成功しました") 29 } else if result == MFMailComposeResult.failed { 30 print("メール送信に失敗しました") 31 } 32 33 currentViewController?.dismiss(animated: true, completion: nil) 34 35 //mailViewController.dismiss(animated: true, completion: nil) //閉じる <= Controllerを間違えていたので編集 36 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/08 05:11
2019/01/08 05:16
2019/01/08 06:05