2017-05-20 27 views
-1

我有一個DataHandler對象,實例化時顯示一個MFMailComposeViewController到不同的ViewControllers。無法關閉MFMailComposeViewController從一個單獨的ViewController

例如,在一個類中,我有一個IBAction爲的是電子郵件的數據,爲了做到這一點來電的DataHandler:

@IBAction func exportData(_ sender: Any) { 
    let dh = DataHandler() 
    dh.sendEmail(vc: self) 
} 

的DataHandler然後做到這一點:

func configureEmail() -> MFMailComposeViewController{ 
    let mailComposerVC = MFMailComposeViewController() 
    let dataHandler = DataHandler() 
    let data = dataHandler.getData(fileName: file!) 
    mailComposerVC.mailComposeDelegate = self 
    mailComposerVC.setToRecipients([emailAddr!]) 
    mailComposerVC.setSubject("blah!") 
    mailComposerVC.addAttachmentData(data as Data, mimeType: "text/csv", fileName: "file.csv") 
    return mailComposerVC 
} 

func sendEmail(vc: UIViewController){ 
    if MFMailComposeViewController.canSendMail() { 
     let emailClient = configureEmail() 
     vc.show(emailClient, sender: vc) 
    } 
    else{ 
     print("Unable to send emails") 
    } 
} 

我能發送電子郵件,但是,發送後無法關閉視圖控制器。我已經將此插入到DataHandler中

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) { 

    // Dismiss the mail compose view controller. 
    controller.dismiss(animated: true, completion: nil) 
} 

我已經搜索了互聯網尋求解決方案,並在我的智慧結束。請幫忙! :)

編輯1: 更改controller.dismiss(動畫:真,完成:無),以self.dismiss(動畫:真,完成:無)

+0

首先:您必須出示此控制器。 – Mannopson

回答

0

您需要設置代理:

mailComposerVC.mailComposertDelegate = self 
+0

嗨,我以爲我這樣做: mailComposerVC.mailComposeDelegate = self –

+0

委託方法被調用? mailComposertVC應該被解僱,但不是父vc。 –

+0

你的意思是解僱郵件VC的人嗎? –

0
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) 

被定義在IBAction的範圍之外。因此,關閉MFMailComposeViewController所需的DataHandler對象與dismiss函數不在同一範圍內。解決方案是將DataHandler對象聲明爲調用DataHandler函數的類的變量。

相關問題