迅速 - 从Sprite Kit中解雇邮件查看控制器 [英] swift - dismissing mail view controller from Sprite Kit

查看:175
本文介绍了迅速 - 从Sprite Kit中解雇邮件查看控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试向Sprite Kit游戏添加发送电子邮件按钮。我可以看到电子邮件对话框。但是如果我取消了,应用程序将会崩溃或什么都不做。如果我发送,电子邮件将发送,但对话框保持。我不能得到 mailComposeController 功能来启动...请帮助!

I am trying to add a send email button to a Sprite Kit game. I can get the email dialog to show up. But if I hit cancel, the app will crash or do nothing. If I hit send, the email will send, but the dialog stays. I cannot get the mailComposeController function to fire...please help!

代码:

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(["test1@test.com"])
    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)
}


推荐答案

问题是您正在将mailVC作为根视图,您必须将其显示在您的视图中,如下所示

The issue is you are making the mailVC as the root view, you have to present it on your view like given below

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

这篇关于迅速 - 从Sprite Kit中解雇邮件查看控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆