Swift 2: кнопка отмены электронной почты перестает работать после второй попытки просмотра таблицы
Я использую табличное представление, в котором есть ячейка с надписью "Отправить нам отзыв". Он открывает приложение электронной почты с предустановленной информацией для отправки. Я могу отправить электронное письмо и / или отменить его, но когда я отменяю его в первый раз, оставаясь в представлении таблицы, снова коснитесь ячейки, чтобы открыть электронное письмо, я не могу отменить его снова. Это просто остается на просмотре электронной почты.
Предложения?
Мой код ниже:
import UIKit
import MessageUI
class FeedbackViewController: UITableViewController, MFMailComposeViewControllerDelegate {
let mailComposerVC = MFMailComposeViewController()
override func viewDidLoad() {
super.viewDidLoad()
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.section == 0 && indexPath.row == 0
{
let alertController = UIAlertController(title: "Rate Us", message: "\nAre you enjoying our app? Please rate us in the app store!\n\nElse if you know of ways we can make our app better, please send us feedback so we can improve the experience for you!\n\nThank you!\n\nTimmy Caish", preferredStyle: .Alert)
alertController.addAction(UIAlertAction(title: "Rate on iTunes", style: .Default, handler: {
(action: UIAlertAction!) -> Void in
UIApplication.sharedApplication().openURL((NSURL(string: "http://google.com")!))
print("Rate us alert button worked.")
print("Send to iTunes")
}))
alertController.addAction(UIAlertAction(title: "Send Us Feedback", style: .Default, handler: {
(action: UIAlertAction!) in
print("Rate Us feeback button worked.")
let mailComposeViewController = self.configureMailComposeViewController()
if MFMailComposeViewController.canSendMail()
{
self.presentViewController(mailComposeViewController, animated: true, completion: nil)
}
else
{
self.showSendMailErrorAlert()
}
}))
alertController.addAction(UIAlertAction(title: "Cancel", style: .Default, handler: { (action: UIAlertAction) in
print("Rate us cancel button worked.")
print("Rate us")
}))
presentViewController(alertController, animated: true, completion: nil)
}
if indexPath.section == 0 && indexPath.row == 1
{
let mailComposeViewController = configureMailComposeViewController()
if MFMailComposeViewController.canSendMail()
{
self.presentViewController(mailComposeViewController, animated: true, completion: nil)
}
else
{
self.showSendMailErrorAlert()
}
print("Send us feedback")
}
}
func configureMailComposeViewController() -> MFMailComposeViewController {
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["developer.timmy@gmail.com"])
mailComposerVC.setSubject("Weather Simplicity Feedback")
mailComposerVC.setMessageBody("Hello,\n\nI would like to share the following feedback...\n\n", isHTML: false)
return mailComposerVC
}
func showSendMailErrorAlert() {
let sendMailErrorAlert = UIAlertController(title: "Error", message: "Your device could not send the email. Check your email configurations and try again.", preferredStyle: UIAlertControllerStyle.Alert)
let okay = UIAlertAction(title: "Okay", style: UIAlertActionStyle.Default, handler: nil)
sendMailErrorAlert.addAction(okay)
self.presentViewController(sendMailErrorAlert, animated: true, completion: nil)
}
func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
switch result {
case MFMailComposeResultCancelled:
print("Cancelled mail")
break
case MFMailComposeResultSent:
print("Message sent")
break
default:
break
}
self.dismissViewControllerAnimated(true, completion: nil)
}
}
1 ответ
Попробуйте создать новый mailViewController только тогда, когда он вам нужен в didSelectRow, а не при создании контроллера представления. Это будет гарантировать, что он очищается каждый раз и не создается, если в этом нет необходимости, и может решить проблему, когда вторая отмена не работает.