2017-06-16 54 views
-1

我已经创建了一个发送预填充电子邮件的应用程序。邮件将完美发送,但邮件作曲者不会关闭。下面是我的代码。任何帮助表示赞赏。MFMailComposeViewController不会关闭

@IBAction func sendEmail(_ sender: Any) 
{ 
    let mailComposeViewController = configuredMailComposeViewController() 
    if MFMailComposeViewController.canSendMail() { 
     self.present(mailComposeViewController, animated: true, completion: nil) 
    } else { 
     self.showSendMailErrorAlert() 
    } 
} 

func configuredMailComposeViewController() -> MFMailComposeViewController {  
    let subject = "subject" 
    let body = "body" 

    let composeVC = MFMailComposeViewController() 
    composeVC.mailComposeDelegate = self 

    // Configure the fields of the interface. 
    composeVC.setToRecipients(["[email protected]"]) 
    composeVC.setSubject(subject) 
    composeVC.setMessageBody(body, isHTML: false) 

    return composeVC 
} 
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() 
} 

// MARK: MFMailComposeViewControllerDelegate Method 
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

不相关,但您应该在'if'语句内调用'configuredMailComposeViewController'。为什么要创建它,如果你不能发送电子邮件? – rmaddy

+0

添加一个断点以确保正在调用controller.dismiss(animated:true,completion:nil)。 –

回答

0

你的问题是在这里:

func configuredMailComposeViewController() -> MFMailComposeViewController {  
    let subject = "subject" 
    let body = "body" 

    let composeVC = MFMailComposeViewController() 
    composeVC.mailComposeDelegate = self 
    .... 
} 

MFMailComposeViewController生活在configureMainComposeViewController功能和超出范围,一旦终止。这意味着你的代表也会消失。

将你的composeVC变量设置为一个实例var,你应该没问题。