Swift: как определить, когда отправляется электронное письмо для обновления табличного представления?

#ios #swift #email #swift3 #mfmailcomposer

#iOS #swift #Адрес электронной почты #swift3 #mfmailcomposer

Вопрос:

Я создаю приложение, которое позволяет пользователю отправлять простое электронное письмо через MFMailComposer. Я уже настроил эту часть, но я пытаюсь выяснить, как после отправки электронного письма обновить табличное представление, показывающее что-то вроде «Отправлено электронное письмо» с возможной отметкой времени? пока у меня есть массив строк, в котором должны храниться данные для отправленных электронных писем:

 var emailSent = [String]()
  

Любое предложение или помощь будут действительно оценены!

Комментарии:

1. С какой именно частью вам нужна помощь? Есть ли у вас код в методе делегирования mail composer для проверки результата?

Ответ №1:

Вы могли бы создать свойство в своем контроллере tableview с именем selectedCellIndexPathRow, которое вы бы установили в своем методе didSelectRowAtIndexPath:

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    selectedCellIndexPathRow = indexPath.row
    //Open your MailComposeViewController
}
  

Затем вы можете выполнить следующие действия после отправки электронного письма:

 func mailComposeController(controller: MFMailComposeViewController, didFinishWithResult result: MFMailComposeResult, error: NSError?) {
    if result.rawValue == MFMailComposeResult.Sent.rawValue {
        emailSent[selectedCellIndexPathRow] = true
        tableView.reloadData()
    }

    // Dismiss the mail compose view controller.
    controller.dismissViewControllerAnimated(true, completion: nil)
}
  

Ответ №2:

Вы можете создать пользовательский подкласс MFMailComposerViewController , переопределить setMessageBody и сохранить отправленное тело для последующего использования:

 class MyMailComposer: MFMailComposeViewController {
    var lastSentBody:String?

    override func setMessageBody(_ body: String, isHTML: Bool) {
        lastSentBody = body
        super.setMessageBody(body, isHTML: isHTML)
    }
}