问题描述
我在 UIAlertController 中打开了 MFMailComposeViewController,代码如下所示:
import StoreKit
import MessageUI
class SettingsListViewController: UIViewController,MFMailComposeViewControllerDelegate,UINavigationControllerDelegate {
// Some code adding the UITableView and etc
// ...
}
private extension SettingsListViewController {
func didSelectShareCell(shareSectionCell: ShareSectionCell,_ tableView: UITableView,cellForRowAt indexPath: IndexPath) {
switch shareSectionCell {
// Some other cases...
case .rate:
let actionSheet = UIAlertController(title: "Feedback",message: "Are you enjoing the app?",preferredStyle: .alert)
actionSheet.addAction(UIAlertAction(title: "dismiss",style: .cancel,handler: nil))
actionSheet.addAction(UIAlertAction(title: "Yes,i love it",style: .default,handler: { action in
SKStoreReviewController.requestReview()
}))
actionSheet.addAction(UIAlertAction(title: "No,this sucks",handler: { action in
guard MFMailComposeViewController.canSendMail() else {
// Alert info user
return
}
let composer = MFMailComposeViewController()
composer.mailComposeDelegate = self
composer.delegate = self
composer.setToRecipients(["my mail"])
composer.setSubject("i'm mad")
composer.setMessageBody("hey,i love your app but...",isHTML: false)
self.present(composer,animated: true)
func mailComposeController(_ controller: MFMailComposeViewController,didFinishWith result: MFMailComposeResult,error: Error?) {
self.dismiss(animated: true)
}
}))
present(actionSheet,animated: true)
}
}
}
一切正常。发送邮件窗口打开,邮件也被发送等等,但是当按下“取消”和“发送”按钮时,MFMailComposeViewController() 不会被解除(必须向下滑动才能解除它)
有什么问题?
解决方法
将此委托放在函数外部和控制器类内部。
另外,像这样解雇controller.dismiss(animated: true)
private extension SettingsListViewController {
func mailComposeController(_ controller: MFMailComposeViewController,didFinishWith result: MFMailComposeResult,error: Error?) {
controller.dismiss(animated: true)
}
}