ios - 有什么方法可以创建电子邮件的常用方法(例如:- 在应用程序中联系我们)
问题描述
我收到一个错误:- // Cannot assign value of type 'UIViewController' to type 'MFMailComposeViewControllerDelegate?' //
如果我没有分配代表,那么在消息 VC 中单击 CANCEL 后我将无法返回。
请参阅此代码:-现在我正在做这样的事情:-
extension UIViewController {
func contactUs() {
if MFMailComposeViewController.canSendMail() {
mc.mailComposeDelegate = self
if let name = CurrentUser.name, let phoneNo = CurrentUser.phone {
mc.setMessageBody("\n\n\nThanks & Regards\n\(name)\n\(phoneNo)", isHTML: false)
}
mc.setSubject(emailTitle)
mc.setToRecipients(toRecipents)
self.present(mc, animated: true, completion: nil)
}
}
}
extension ViewController: MFMailComposeViewControllerDelegate {
func mailComposeController(_ controller:MFMailComposeViewController, didFinishWith result:MFMailComposeResult, error:Error?) {
switch result {
case .cancelled:
print_debug("Mail cancelled")
case .saved:
print_debug("Mail saved")
case .sent:
print_debug("Mail sent")
case .failed:
print_debug("Mail sent failure: \(error?.localizedDescription ?? "Mail not sent")")
default:
break
}
self.dismiss(animated: true, completion: nil)
}
}
解决方案
嗨,Vipul,您遇到错误是因为在您的代码中您将 viewcontroller 分配给 self 所以您需要做的是对该控制器进行类型转换
mc.mailComposeDelegate = self as? MFMailComposeViewControllerDelegate
这将解决您的问题,我还建议您像这样为 MFMailComposeViewControllerDelegate 提供默认实现
import MessageUI
extension MFMailComposeViewControllerDelegate {
public func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?){
switch result {
case .cancelled:
print_debug("Mail cancelled")
case .saved:
print_debug("Mail saved")
case .sent:
print_debug("Mail sent")
case .failed:
print_debug("Mail sent failure: \(error?.localizedDescription ?? "Mail not sent")")
default:
break
}
controller.dismiss(animated: true, completion: nil)
}
}
而且您不需要设置 mc.mailComposeDelegate
推荐阅读
- django - Django 一对多(0..4)关系
- sql - 获取过去 12 周的数据 oracle
- php - Symfony:设置时模板中不提供 Cookie
- node.js - 如何在 Puppeteer 中使用导出的字符串作为我的元素
- cmd - 我想在 Windows 中自动全屏显示命令提示符
- three.js - 如何使用非平面形状(表面)的threejs绘制具有3d点(x,y,z)的形状几何
- node.js - 在节点 js Firestore 事务中读取多个文档
- javascript - 处理来自异步调用的数据
- qt - yocto-krogoth 中的 falkon 编译中的 cmake 错误
- c# - MongoDB 中的运算符使用官方 .NET 驱动程序执行多过滤器查询