使用 MFMailComposeViewController 发送电子邮件后关闭模式视图控制器 [重复]

Posted

技术标签:

【中文标题】使用 MFMailComposeViewController 发送电子邮件后关闭模式视图控制器 [重复]【英文标题】:Dismissing modal view controller after sending email with MFMailComposeViewController [duplicate] 【发布时间】:2017-12-28 23:56:12 【问题描述】:

我有一个以模态方式呈现的视图控制器,让人们注册一个时事通讯,然后调用MFMailComposer。发送邮件后,我希望能够在单击电子邮件窗口上的 Send 后关闭模态视图控制器。这可能吗?

这被错误地标记为重复,因为我的代码结构如下:

CustomViewController 调用 ModalViewController ModalViewController 调用 MailComposer 用户点击发送后 ModalViewController 需要关闭。

【问题讨论】:

【参考方案1】:

检查MFMailComposeResultsent 后,您应该关闭mailComposeController(_:didFinishWith:error:) 中的控制器。

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) 
    controller.dismiss(animated: true)

    if result == .sent 
        dismiss(animated: true)
    

请记住,您应该设置邮件撰写视图控制器的委托,并且您的视图控制器应该符合MFMailComposeViewControllerDelegate 协议:

class CustomViewController: UIViewController, MFMailComposeViewControllerDelegate 
    fileprivate var mailComposeVc: MFMailComposeViewController!
    [...]

    func someFunc() 
        mailComposeVc.delegate = self
    

【讨论】:

正确的做法是在dismiss方法的completion handler里面切换结果 如果 OP 只想处理一个结果,@LeoDabus 切换不是强制性的,尽管它对于调试目的很有用。另外,我感兴趣的是在解除方法的完成处理程序中处理视图控制器的解除有什么优势。 只有在关闭动画完成后才会执行代码 @LeoDabus 当然,这很明显。我只是在问等待动画是否一定是一件好事。 只是正确显示它

以上是关于使用 MFMailComposeViewController 发送电子邮件后关闭模式视图控制器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份