当前位置: 首页 > 面试题库 >

Swift 3如何显示基于MFMailComposeResult电子邮件屏幕的确认屏幕

柳越
2023-03-14
问题内容

我正在构建一个应用程序,该应用程序构造电子邮件并将其呈现在MFMailComposeViewController中,以供用户发送。当用户发送或取消它时,我希望该应用以适当的确认屏幕消息作为响应。

我可以撰写电子邮件,关闭撰写屏幕,并且在IB中从预先撰写视图到确认视图都有一个命名的segue。但是我无法执行该命令。

因此,我该如何在搜索目标中更新文本消息,然后对其进行搜索。

因为我正在尝试学习Swift,所以我对理解代码的工作方式非常感兴趣,而不仅仅是获得有效的代码。因此,我非常感谢您的帮助。

工作流程始于用户从应用中捕捉照片:

    func snapPhoto(){

    if let cameraConnection = sessionOutput.connection(withMediaType: AVMediaTypeVideo) {

        sessionOutput.captureStillImageAsynchronously(from: cameraConnection, completionHandler: { buffer, error in

            let myMessage   = self.buildEmail()
            let myJpg       = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(buffer)
            let mapSnap     = (self.myMap == nil) ? nil : UIImagePNGRepresentation(self.myMap!)

            let mail        = self.setupMail(to: myMessage.to, subject: myMessage.subject, body: myMessage.body, myJpg: myJpg!, mapSnap: mapSnap)

            self.presentMailComposer(mail: mail)

        }) // close completionHandler

    } // close if let cameraConnection

} // close func snapPhoto

它将所有电子邮件内容组合并传递给:

    func presentMailComposer(mail : MFMailComposeViewController) {

    if MFMailComposeViewController.canSendMail() {

        self.present(mail, animated: true, completion: nil)

    } else {

        let sendMailErrorAlert = UIAlertController.init(title: "Uh oh!", message: "Unable to send email.", preferredStyle: .alert)
        self.present(sendMailErrorAlert, animated: true, completion: nil)

    } // close if

} // close presentEmailComposer

然后当用户点击“取消”的“发送”时触发

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

    switch result.rawValue {

    case MFMailComposeResult.cancelled.rawValue:

        self.performSegue(withIdentifier: "afterEmail", sender: self)
        print("Mail cancelled")

    case MFMailComposeResult.saved.rawValue:

        print("Mail saved")

    case MFMailComposeResult.sent.rawValue:

        print("Mail sent")

    case MFMailComposeResult.failed.rawValue:

        print("Mail sent failure: %@", [error!.localizedDescription])

    default:

        break

    }

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

} // close mailCompose

这就是我发现自己陷入困境的地方。我可以访问MFMailComposeResult,它是正确的,但是我无法弄清楚如何显示确认视图,因此在撰写视图滑动时可以使用该视图。


问题答案:

您需要使视图控制器成为MFMailComposeViewController委托,并覆盖didFinishWith
result方法,并在dismiss方法的完成处理程序内切换MFMailComposeResult值:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true) { 
        // do whatever you need to do after dismissing the mail window
        switch result {
            case .cancelled: print("cancelled")
            case .saved:     print("saved")
            case .sent:
                let alert = UIAlertController(title: "Mail Composer", message: "Mail was successfully sent", preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "Done", style: .default, handler: nil))
                self.present(alert, animated: true)
            case .failed:    print("failed")
        }
    }
}


 类似资料:
  • 我目前正在编写一个游戏,你必须避免小行星。我不得不处理一些混乱的坐标,我不得不猜测精灵的坐标。我现在有了描述我的世界的任意单位。不幸的是,我的游戏屏幕不能完全工作。当我想渲染我的小行星时,游戏屏幕会显示一个黑屏。 上面显示的代码工作正常,并向我展示了以下内容: 当我在GameScreen类中添加小行星的渲染方法时,GameScreen只是黑色的: 小行星等级: 小行星等级:

  • 问题内容: 嗨,我正在编写图形程序,我一直在寻找一种获取所使用屏幕物理尺寸的方法。我可以获得以像素为单位的屏幕大小以及逻辑分辨率。我似乎找不到任何地方可以获取任何显示器规格中始终具有的物理尺寸(例如19“-376 x 301 mm)。问题是,加载此信息时,此信息是否甚至还存储在OS中的任何位置?我正在编写的程序需要在Mac和Windows上运行。 谢谢! nt 问题答案: 我认为Java不可能实现

  • 我正在使用angular和firebase登录我的firebase web应用程序。在使用Firefox时,我简单地得到了一个错误: 身份验证/电子邮件无效/电子邮件地址格式错误。 但是,用户名和密码是正确的,我可以正确路由到已登录的应用程序。 HTML 当我将错误记录到UI以通知用户时,这有点烦人,因为我在正确登录之前短暂地看到了错误。 有办法解决这个问题吗?

  • 8.3.3 打印输出的中断功能 打印输出是一种硬拷贝输出,也是一种常用的输出形式。随着计算机应用领域的不断扩大,外围设备的重视程度也越来越高。目前,打印机的种类已日益丰富,有针式打印机、喷墨打印机和激光打印机等。从打印色彩来看,既有普通的黑色打印,也有彩色打印。总之,计算机打印输出的品质是越来越高。 1、打印机状态字 打印机状态字记录着打印机的当前工作情况(或状态),它相当于CPU中的程序状态字和

  • 问题内容: 我正在使用PIL库进行一些图像编辑。关键是,我不想每次都将图像保存在HDD上以在资源管理器中查看它。是否有一个小模块可以使我设置窗口并显示图像? 问题答案: 从PIL教程中: 一旦有了 Image 类的实例,就可以使用该类定义的方法来处理和操纵图像。例如,让我们显示刚刚加载的图像: 更新: 如今,该方法已正式记录在PIL的Pillow分支中,并说明了如何在不同的OS上实现该方法。

  • 问题内容: 在终端中工作时,我看到了最后一个Shell命令执行输出的历史记录。如果运行vim,我会看到全屏打开的文件。退出vim时,我可以再次看到最后一个shell命令的历史记录。 但是,当我从屏幕上使用vim时。我在退出vim时看到的是刚刚编辑的文件的足迹,而不是最后一个shell命令的历史记录。 我想看看外壳的历史。 我该如何实现这种行为? 我用了: terminal.app和iterm2.a