2016-10-28 4 views
2

Я хочу отправить электронное письмо от моего приложения Swift, и он хорошо работает, он отправляет электронное письмо.Как закрыть MFMailComposeViewController?

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

Это код, который я должен отправить по электронной почте (после нажатия кнопки):

@IBAction func btnSendEmailAction(_ sender: AnyObject) { 

    let composeVC = MFMailComposeViewController() 
    composeVC.mailComposeDelegate = self 

    composeVC.setToRecipients(["[email protected]"]) 
    composeVC.setSubject("Hello!") 
    composeVC.setMessageBody("Hello World!", isHTML: false) 

    self.present(composeVC, animated: true, completion: nil) 
} 

func mailComposeController(controller: MFMailComposeViewController, 
          didFinishWithResult result: MFMailComposeResult, error: NSError?) { 

    switch result { 

    case MFMailComposeResult.cancelled: 
     controller.dismiss(animated: true, completion: nil) 
     break 

    case MFMailComposeResult.sent: 
     controller.dismiss(animated: true, completion: nil) 
     break 

    case MFMailComposeResult.failed: 
     controller.dismiss(animated: true, completion: nil) 
     break 

    default: 
     break 
    } 

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

но расположение не завершает работу при нажатии на Cancel или Переданные кнопки.

Я знаю, что есть много вопросов, связанных с этой проблемой, но я их много смотрел, и это код, который я мог бы получить из смеси некоторых из них. Обратите внимание, что большинство из них находятся в Objective вместо Swift (а иногда и методов не существует).

Пример: iPhone: How to Close MFMailComposeViewController?

я упускаю что-то в моем коде? Как я могу определить «Удалить проект» и «Сохранить черновик»?

Заранее благодарен!

+0

Если вы собираетесь уволить 'controller' в любом случае, почему бы не вынуть ключ и просто' controller.dismiss (анимированный: истинное, завершение: ноль) ' – Adrian

+0

@Adrian, потому что он не отклонил контроллер, поэтому я попытался сосредоточиться в каждом случае отдельно. –

+0

@ Аниш 웃 Что вы имеете в виду? –

ответ

5

Похоже, вы используете swift 3 и не используете действительный метод делегата. Исправленный метод делегата заключается в следующем:

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

     switch result { 
     case .cancelled: 
      break 
     case .saved: 
      break 
     case .sent: 
      break 
     case .failed: 
      break 

     } 

     controller.dismiss(animated: true, completion: nil) 
    } 
+0

Вы правы. Пропущено через несколько секунд. –

+0

Ваш метод делегирования неверен. –

+0

Хорошо, наконец, я заметил, что кнопка «Отменить» на «Отправить черновик» или «Сохранить черновик» должна была отменить эти два параметра, а не электронную почту. Жесткий понедельник. Вы были правы, метод делегата был неправильным. Спасибо! Отлично работает! –

Смежные вопросы