2016-08-17 64 views
1

我在使用MFMailComposer时遇到了问题。我使用示例Swift Code按照iOS开发人员指南。Swift Dismiss来自幻灯片菜单的邮件控制器

我也采取了看看本网站上的以下类似的问题:

swift - dismissing mail view controller from Sprite Kit

MFMailComposeViewController in Swift does not dismiss

链接框架&库:MessagesUI.framework

import MessageUI 

class FHCLLeftMenuViewController: FHBaseViewController,UITableViewDelegate,UITableViewDataSource,MFMailComposeViewControllerDelegate 

当我点击我的应用程序的左侧滑动菜单中的支持文本,邮件应用程序出现我写了一封电子邮件,然后点击发送。电子邮件显示在我的收件箱中,但控制器在发送邮件后不会自行解散。当我试图删除草稿时,也会发生这种情况,我必须关闭应用程序并重新启动它。

 case kFHCLMenuTagSupport: 
     //PT DashBoard 

     if !MFMailComposeViewController.canSendMail() { 
      print("Mail services are not available") 
      return 
     } 

     let composeVC = MFMailComposeViewController() 
     composeVC.mailComposeDelegate = self 

     // Configure the fields of the interface. 
     composeVC.setToRecipients(["[email protected]"]) 
     composeVC.setSubject("Client Support") 
     composeVC.setMessageBody("Some text here.", isHTML: false) 



     // Present the view controller modally. 
     self.presentViewController(composeVC, animated: true, completion: nil) 

     func mailComposeController(controller: MFMailComposeViewController, 
            didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
      // Check the result or perform other tasks. 

      // Dismiss the mail compose view controller. 
      self.dismissViewControllerAnimated(true, completion: nil) 

     } 
     break 

我也尝试这种变化返回结果相同的应用程序的主仪表板:

 case kFHCLMenuTagSupport: 
     //PT DashBoard 
     let storyboard = UIStoryboard(name: "Client", bundle: nil) 

     // Create View Controllers 
     let mainPage:FHClientDashBoardViewController = storyboard.instantiateViewControllerWithIdentifier("FHClientDashBoardViewController") as! FHClientDashBoardViewController 
     let mainPageNav = UINavigationController(rootViewController: mainPage) 



     if !MFMailComposeViewController.canSendMail() { 
      print("Mail services are not available") 
      return 
     } 

     let composeVC = MFMailComposeViewController() 
     composeVC.mailComposeDelegate = self 

     // Configure the fields of the interface. 
     composeVC.setToRecipients(["[email protected]"]) 
     composeVC.setSubject("Client Support") 
     composeVC.setMessageBody("Some text here.", isHTML: false) 



     // Present the view controller modally. 
     self.presentViewController(composeVC, animated: true, completion: nil) 

     func mailComposeController(controller: MFMailComposeViewController, 
            didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
      // Check the result or perform other tasks. 

      // Dismiss the mail compose view controller. 
      // self.dismissViewControllerAnimated(true, completion: nil) 
      self.mm_drawerController.setCenterViewController(mainPageNav, withCloseAnimation: true, completion: nil) 
     } 

     break 

任何帮助将不胜感激。

+1

你想关闭'MFMailComposeViewController'或'FHCLLeftMenuViewController'吗? – kabiroberai

回答

0

dismissViewControllerAnimated(_:completion:)函数关闭调用该函数的视图控制器。在这种情况下,由于您在self上调用它,因此它试图解雇FHCLLeftMenuViewController。可以通过调用MFMailComposeViewController上的dismissViewControllerAnimated(_:completion:)来轻松解决此问题。

要做到这一点,只需用下面的代码替换您mailComposeController(controller:didFinishWithResult:error:)功能(它也出现这样的苹果自己的文档里):

func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) { 
    // Check the result or perform other tasks. 

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

从岗位尖端没有工作,但它的是什么如何设置菜单的代码(不是因为建议)。经过一番思考,我想出了一个更好的解决方法。由于该程序同时支持IM消息系统和电子邮件系统,因此我做了以下操作:

1.)将菜单中的支持按钮链接到新视图控制器&故事板。 1信使或电子邮件支持

出于某种原因,如果不试图直接从幻灯片菜单辞退,撰写邮件视图从视图控制器驳回:

2)通过加1接触的选项。不是最优雅的解决方案,但它的工作。