При нажатии кнопки - открытие почтовой программы в Swift на IOS - PullRequest
0 голосов
/ 30 апреля 2018

Я довольно новичок в Swift и, похоже, не могу найти свою ошибку.

Я создал кнопку, и это мой код:

@IBAction func sendEmailTest(_ sender: Any) {
    UIApplication.shared.open(URL(string: "mailto:test@gmail.com")! as URL,
        options: [:], completionHandler: nil)
}

Я хочу открыть почтовую программу с этим, и я думаю, что это должно работать. Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вы не собрали весь свой код там. Что вы делаете, это открываете URL mailto:test@gmail.com, что не является правильным способом сделать это. Вы должны использовать MFMailComposeViewController

В первую очередь:

import MessageUI

И ваш код должен быть похож на:

@IBAction func sendEmailTest(_ sender: Any) {

    if MFMailComposeViewController.canSendMail() {
    let composeVC = MFMailComposeViewController()
    composeVC.mailComposeDelegate = self

    composeVC.setToRecipients(["test@gmail.com"])
    composeVC.setSubject("Email Subject")
    composeVC.setMessageBody("", isHTML: false)

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

    } else {

        print("Cannot send mail")

    }
}

Также включите способ обработки кода после того, как пользователь завершил работу с составителем почты, включив после него вышеуказанный метод:

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

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

}

Подробнее о MFMailComposeViewController можно узнать на сайте разработчиков Apple здесь: https://developer.apple.com/documentation/messageui/mfmailcomposeviewcontroller

Если вы действительно хотите открыть URL, вам следует реализовать следующее:

@IBAction func sendEmailTest(_ sender: Any) {
    if let url: NSURL = NSURL(string: "mailto:test@gmail.com") {
        UIApplication.shared.canOpenURL((url as NSURL) as URL)
    }
}

Убедитесь, что вы запускаете его на реальном устройстве, а не на симуляторе.

Но MFMailComposeViewController должен быть правильным способом его реализации.

Надеюсь, это поможет.

0 голосов
/ 30 апреля 2018

Вот, пожалуйста:

        import MessageUI


        if !MFMailComposeViewController.canSendMail() {
            print("Mail services are not available")
            return
        }
        let composeVC = MFMailComposeViewController()
        composeVC.mailComposeDelegate = self

        composeVC.setToRecipients(["test@gmail.com"])
        composeVC.setSubject("Report a Bug or Request a Feature")


        self.parent?.present(composeVC, animated: true, completion: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...