2016-04-05 9 views
1

Ich versuche, eine Sprite-Kit-E-Mail-Schaltfläche zu senden. Ich kann den E-Mail-Dialog anzeigen lassen. Aber wenn ich Abbrechen klicke, wird die App abstürzen oder nichts tun. Wenn ich auf "Senden" klicke, wird die E-Mail gesendet, aber der Dialog bleibt bestehen. Ich kann die mailComposeController Funktion nicht auslösen ... bitte helfen!swift - Mail-View-Controller aus Sprite Kit entfernen

Code:

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) 
} 

Antwort

0

Das Problem wird Sie die mailVC als Root-Ansicht machen, müssen Sie es auf Ihrer Ansicht präsentieren wie unten

gegeben
@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) 
}