2016-04-05 8 views
1

スプライトキットのゲームに電子メールボタンを追加しようとしています。私は電子メールのダイアログを表示することができます。しかし、私がキャンセルを押すと、アプリはクラッシュするか何もしません。私がsendを押すと、電子メールは送信されますが、ダイアログはそのままです。私はmailComposeControllerの機能を起動できません...助けてください!スプライトキットのメールビューコントローラを無効にする

コード:

import Foundation 
import UIKit 
import MessageUI 

class MailViewController: UIViewController, MFMailComposeViewControllerDelegate { 

let systemVersion = UIDevice.currentDevice().systemVersion 
let devicemodel = UIDevice.currentDevice().model 
let appVersion = NSBundle.mainBundle().infoDictionary?["CFBundleShortVersionString"] as! String 
let appBuild = NSBundle.mainBundle().infoDictionary?["CFBundleVersion"] as! String 
let myrootview2 = UIApplication.sharedApplication().keyWindow?.rootViewController 
let mailComposerVC = MFMailComposeViewController() 


override func viewDidLoad() { 
    super.viewDidLoad() 
} 

func sendEmailButtonTapped(sender: AnyObject) { 
    let mailComposeViewController = configuredMailComposeViewController() 
    if MFMailComposeViewController.canSendMail() { 
     self.view.window?.rootViewController = mailComposerVC 
     print("This is the rootview2: \(myrootview2)") 
     myrootview2!.presentViewController(mailComposeViewController, animated: true, completion: nil) 
    } else { 
     self.showSendMailErrorAlert() 
    } 
} 

func configuredMailComposeViewController() -> MFMailComposeViewController { 
    var msgbody: String 

    mailComposerVC.mailComposeDelegate = self 
    msgbody = "\n\nDevice: \(devicemodel)\niOS Version: \(systemVersion)\nApp Version: \(appVersion)\nApp Build Number: \(appBuild)\n" 
    mailComposerVC.setToRecipients(["[email protected]"]) 
    mailComposerVC.setSubject("test subject") 
    mailComposerVC.setMessageBody(msgbody, isHTML: false) 
    //print(mailComposerVC) 
    return mailComposerVC 
} 

func showSendMailErrorAlert() { 
    let sendMailErrorAlert = UIAlertView(title: "Could Not Send Email", message: "Your device could not send e-mail. Please check e-mail configuration and try again.", delegate: self, cancelButtonTitle: "OK") 
    sendMailErrorAlert.show() 
} 





// THIS DOESN'T GET CALLED WHEN SENDING OR CANCELLING EMAIL! 
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 

    let test1 = result.rawValue 
    print(test1) 
    print(controller) 
    print(self) 
    print(myrootview2) 
} 

答えて

0

@IBAction func sendEmailButtonTapped(sender: AnyObject) { 
    let mailComposeViewController = configuredMailComposeViewController() 

if MFMailComposeViewController.canSendMail() { 

    self.presentViewController(mailComposeViewController, animated: true, completion: nil) 
} else { 
    self.showSendMailErrorAlert() 
} 
} 


 func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) { 
     controller.dismissViewControllerAnimated(true, completion: nil) 
} 
下記のような問題は、あなたがルートビューとしてmailVCを作っているされて

は、あなたのビューにそれを提示しなければなりません