如何关闭 MFMailComposeViewController?

2024-01-18

我想从我的 Swift 应用程序发送一封电子邮件,它运行良好,它发送了电子邮件。

然而,发送电子邮件后,布局并没有退出。我想在发送电子邮件后退出布局。当我按下“取消”、“删除草稿”或“保存草稿”按钮时,我也希望出现这种行为。

这是我必须发送电子邮件的代码(按下按钮后):

@IBAction func btnSendEmailAction(_ sender: AnyObject) {

    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self

    composeVC.setToRecipients(["[email protected] /cdn-cgi/l/email-protection"])
    composeVC.setSubject("Hello!")
    composeVC.setMessageBody("Hello World!", isHTML: false)

    self.present(composeVC, animated: true, completion: nil)
}

func mailComposeController(controller: MFMailComposeViewController,
                           didFinishWithResult result: MFMailComposeResult, error: NSError?) {

    switch result {

    case MFMailComposeResult.cancelled:
        controller.dismiss(animated: true, completion: nil)
        break

    case MFMailComposeResult.sent:
        controller.dismiss(animated: true, completion: nil)
        break

    case MFMailComposeResult.failed:
        controller.dismiss(animated: true, completion: nil)
        break

    default:
        break
    }

    controller.dismiss(animated: true, completion: nil)
}

但当我按“取消”或“发送”按钮时,布局不会退出。

我知道有很多与这个问题相关的问题,但我查看了很多问题,这是我可以从其中一些问题的混合中得到的代码。请注意,大多数方法都在 Objective 中而不是 Swift 中(有时这些方法不存在)。

例子:iPhone:如何关闭 MFMailComposeViewController? https://stackoverflow.com/questions/4104199/iphone-how-to-close-mfmailcomposeviewcontroller

我的代码中遗漏了什么吗?如何检测删除草稿和保存草稿事件?

提前致谢!


看起来您正在使用 swift 3 而没有使用有效的委托方法。更正后的委托方法是这样的:

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

        switch result {
        case .cancelled:
            break
        case .saved:
            break
        case .sent:
            break
        case .failed:
            break

        }

        dismiss(animated: true, completion: nil)
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何关闭 MFMailComposeViewController? 的相关文章

  • 设置/覆盖 UICollectionView 中单元格之间的填充

    我有一个 UICollectionView 但在获取单元格之间的填充时遇到了问题 理论上 我应该能够将屏幕除以 4 并且我可以获得包含 4 个图像的单元格大小 完美地占据屏幕宽度 但是 它选择不这样做 相反 它会创建 3 个具有巨大填充的图
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • ios7 navigationController PushViewController 动画错误

    看来我在 navigationController PushViewController 方法中发现了一个错误 为了重新创建它 我采用了示例主详细信息项目并对 didSelectRow method void tableView UITab
  • 如何使用完成处理程序等待 firestore 请求的完成

    我正在慢慢地了解完成处理程序 如果我有一个 firestore 查询 如果我想使用完成处理程序 则有点向后工作 当 firestore 查询完成时 我必须使用completion 但它的设置功能仍然让我感到困惑 因此 如果这是一个将闭包作为
  • 为什么在授予用户权限时,UIUserNotificationType.None 在当前设置中返回 true?

    我正在编写一种方法来检查当前用户设置是否包含某些通知类型 当检查当前设置是否包含 UIUserNotificationsType None 时 无论授予权限还是拒绝权限 它都会返回 true 有谁知道这是为什么吗 func register
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • Parse.com 和 Facebook 登录,运行无限循环

    我将 Parse 和 Facebook iOS SDK 都更新到了最新版本 当我尝试使用 Facebook 登录时 我的应用程序崩溃了 从调试器中我可以看到它正在无限循环中调用 3 4 个方法 我的登录代码如下所示 void openSes
  • UIDocumentInteractionController 阻止“打开方式”表中的空投

    在我的应用程序中 我允许用户通过 Instagram 分享照片 这需要使用 UIDocumentInteractionController 如果手机支持 则会自动检测空投 如何将其从 打开方式 操作表中删除 即使我使用 UIActivity
  • 用于字数计算的 Swift String 中的字数

    我想做一个程序来找出字符串中有多少个单词 用空格 逗号或其他字符分隔 然后把总数加起来 我正在制作一个平均计算器 所以我想要数据总数 然后将所有单词相加 update Xcode 10 2 x Swift 5 或更高版本 使用基础方法enu
  • 检查 paypal 电子邮件地址是否是经过验证的用户

    我想在购买之前检查尝试从我的网站购买商品的 PayPal 用户是否拥有经过验证的帐户 一旦用户未经验证 他 她进行的任何付款都将失败 资金将自动返还给用户 由于欺诈问题 我是否可以添加或编辑任何代码以使其正常工作 好吧 我找到了这个 htt
  • iOS 滚动视图允许滚动过去的内容

    我正在努力优化我的应用程序以适应横向和较小的屏幕 我主要使用滚动视图来实现这一点 在我的其中一个视图中 我有一个容器视图 当我在故事板中的设备之间切换时 这个容器视图看起来很完美 容器视图映射到具有滚动视图的视图控制器 该滚动视图的顶部 底
  • 为什么这个谓词格式会变成 '= nil'

    有人建议这个线程 https stackoverflow com questions 40686005 nspredicate crash after swift 3 migration与我的问题完全相同 但是 我的应用程序没有崩溃 并且我
  • 如何在 Swift 中获取字典中最后输入的值?

    如何获取 Swift 字典中最后输入的值 例如 我如何从下面获取值 CCC var dictionary Dictionary
  • 在真实设备上展示测试广告

    这是我的代码 let request GADRequest request testDevices kGADSimulatorID XXXX2F32d69CCA859FFB559D0FEA3CF6483D08A6 adView load r
  • 进入前台后刷新数据

    更改默认设置后 我想在AppDelegate中进入前台时刷新myViewController的数据 我所做的是 AppDelegate m void applicationDidFinishLaunching UIApplication a
  • 错误:更改核心数据模型后架构armv7的重复符号

    我有一个使用核心数据框架的应用程序 我工作得很好 我刚刚更改了数据模型 向一个实体添加一个属性 当我尝试构建它时 出现错误 duplicate symbol OBJC METACLASS AccountFolder in Users XXX
  • 在 Swift 中使用 CommonCrypto 解密时出现问题

    我在一家Swift only加密 解密Extension for String and NSData 并且 crypt 部分的工作基于 Zaph 在链接问题中提供的答案 在 Swift 中使用 CCCrypt CommonCrypt 时出现
  • 频繁绘制 CGPath 时的性能

    我正在开发一个将数据可视化为折线图的 iOS 应用程序 该图被绘制为CGPath在全屏自定义中UIView最多包含 320 个数据点 数据经常更新 图表需要相应地重新绘制 刷新率为 10 秒就很好了 到目前为止很容易 然而 我的方法似乎需要
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • 苹果推送通知在生产中不起作用

    我们完全陷入困境 请帮忙 我和我的团队制作了一个 iPhone 应用程序 这是我们第一次在 iOS 上尝试 一切都很好 直到我们提交应用程序并在应用程序商店上可用为止 推送通知服务无法正常工作 我在网上搜索并尝试根据人们的建议仔细检查我们的

随机推荐

  • Rust 基准测试已优化

    我正在尝试对从 Rust 哈希映射中获取密钥进行基准测试 我有以下基准 bench fn rust get b mut Bencher let hash keys get random hash
  • Qt 去除边距

    我目前正在使用 QMainWindow 小部件 我想删除内部小部件周围的边距 我成功删除了窗口边框的边距 但没有删除窗口内小部件的边距 这是我的代码 例如 this gt mainWidget new QWidget this this g
  • 如何使用Javascript切片提取字符串的第一个和最后一个字母?

    如何使用 JavaScriptslice提取字符串的第一个和最后一个字母 Eg Hello World 我需要的结果是 dH 以下是我的 jsfiddle http jsfiddle net vSAs8 http jsfiddle net
  • log4net AdoNetAppender 截断消息文本

    我遇到一个问题 无论我做什么 我的消息字段都会被截断为大约 42k 这是一个简短的片段来说明我的配置
  • R - 匹配不同长度矩阵的行和列

    我现在的问题如下 我有一个有向 1 模式边缘列表 代表在某一年参与联合项目的演员对 可能如下所示 projektleader projectpartner year A B 2005 A C 2000 B A 2002 现在我只需要某一特定
  • 如何将 UITextField 中用作 leftView 的 UILabel 与 textField 的文本垂直对齐?

    我正在使用一个UILabel as the leftView of a UITextField 问题是文本字段的文本高于标签的文本 这是我到目前为止使用过的代码 UILabel startsWith UILabel alloc init s
  • React-Navigation:使用/更改带有 Redux 状态的标题标题

    是否可以访问 React Navigation 的标题标题中的整个 Redux 状态 The 官方文档 https reactnavigation org docs intro headers表示导航对应的状态是可访问的 static na
  • 交叉编译中的CMake CMAKE_AUTOMOC

    我有以下问题 我尝试使用 CMake 中构建的本机机制进行交叉编译 我准备了以下 toolchain cmake 文件 set CMAKE SYSTEM NAME Linux set CMAKE SYSTEM PROCESSOR arm s
  • 具有复选框行为的自定义列表视图,如 Gmail 应用程序

    我在这里阅读了很多有关列表视图和复选框的帖子 他们中的很多人都使用 CheckedTextView 或扩展它 我想实现一个带有复选框行为的自定义列表视图 就像在 android 邮件应用程序 Gingerbread ICS 上一样 只有复选
  • spring security 2.0.7 和 spring 2.5 的登录表单问题

    您好 我正在尝试在我的应用程序上放置一个登录页面 我的login jsp是
  • 弱引用的其他用途?

    我知道弱引用是一个很好的选择记忆 http en wikipedia org wiki Memoization潜在的大量数据 以及维基百科关于弱引用的文章 http en wikipedia org wiki Weak reference仅
  • 如何写入来自 Firebase 的数据以快速存储?

    首先 我正在使用 React Native 我正在从 Firebase 获取数据并希望快速写入存储 通过 Redux 但这不起作用 您可以在下面找到我的所有代码 功能 async getTumData uid const selectedG
  • 如果会话因无活动而过期,则注销并重定向到登录页面

    我正在尝试使用 Flask 更新一个网站 其中用户拥有帐户并且能够登录 如果超过 10 分钟没有活动 我想让用户会话过期并注销 并将用户重定向到登录页面 我想更新它 app before request下面是我的代码 如何检查登录时间并检查
  • 无法使用mockito模拟私有方法

    我正在尝试使用 power mockito 来模拟私有方法 读完这篇文章后我得到了一些想法 并且遵循了相同的结构 example https stackoverflow com questions 28121177 mock private
  • 如何将音频流式传输到 OpenAL Sources 中?

    我刚刚开始使用 OpenAL 我已成功将 WAV 文件加载到其中 并成功播放它们 这很容易 现在 我需要能够将音乐流式传输到 OpenAL 中 而不是将整个文件加载到其中 虽然这对于声音效果等有好处 但正如您可能知道的那样 对于音乐来说可能
  • 在 Oracle SQL 中 Case 语句的 When 部分中使用别名

    我已经尝试查找一段时间了 是否可以使用前面在 select 语句中声明的别名 是否可以在 Oracle SQL 的 case 语句中稍后的 case 中使用它 我发现的大多数结果都是关于如何根据案例陈述创建别名 这不是同一个问题 一个简单的
  • 防止用户在 Azure Devops (VSTS) 中创建没有父项的工作项

    我想阻止用户直接创建工作项 任务 任务只能通过使用用户故事中的添加子选项来创建 而不能直接创建 是否可以 防止用户在 Azure Devops VSTS 中创建没有父项的工作项 有一个解决方法 但不是完整的解决方案 您可以检查它是否适合您
  • git push heroku master 说“一切都是最新的”,但该应用程序不是最新的

    我在 Heroku 上有一个运行旧代码的应用程序 我做了一个小改变并提交了改变 然后我跑了 git push heroku master 它会说 Fetching repository done Everything up to date
  • Ruby on Rails 领域平均水平如何?

    有没有一种简单的方法来获取集合中属性的平均值 例如 每个用户都有一个分数 给定一组用户 users 如何获得该组的平均分数 有类似 users average score 的东西吗 我想我在数据库字段中遇到过类似的东西 但我需要它为集合工作
  • 如何关闭 MFMailComposeViewController?

    我想从我的 Swift 应用程序发送一封电子邮件 它运行良好 它发送了电子邮件 然而 发送电子邮件后 布局并没有退出 我想在发送电子邮件后退出布局 当我按下 取消 删除草稿 或 保存草稿 按钮时 我也希望出现这种行为 这是我必须发送电子邮件