在tableView中实现MailComposeController

问题描述 投票:0回答:2

我在TableView中创建了设置页面。当我点击第0行调用UIActivityViewController时。当我点击row2调用MailComposeController时。

调用MailComposeController,但是当我点击邮件屏幕上的取消或发送按钮时,它不起作用。

这是代码。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if indexPath.row == 0 {

            let message = "Hey download my app [LINK]"
            let shareView = UIActivityViewController(activityItems: [message], applicationActivities: nil)
            self.present(shareView, animated: true, completion: nil)

        } else if indexPath.row == 1 {
            let mailCompose = MFMailComposeViewController()

            mailCompose.mailComposeDelegate = self

            mailCompose.setToRecipients(["[email protected]"])

            mailCompose.setSubject("feedback")

            mailCompose.setMessageBody("text", isHTML: false)

            if MFMailComposeViewController.canSendMail()

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

            else{

                print("error...!")

            }
        }



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

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

        }
ios swift
2个回答
2
投票

你必须将委托方法放在ViewController中,而不是在tableView:didSelectRowAt方法中:

extension ViewController: MFMailComposeViewControllerDelegate {
    func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
        controller.dismiss(animated: true, completion: nil)
    }
}

1
投票

单击发送和取消按钮实现Mail composer的委托方法:

以下是您需要实现的Delegates方法:

func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
    controller.dismiss(animated: true, completion: {
        switch (result)
        {
        case .cancelled:
            break
        case .saved:
            break;
        case .sent:
             AppUtility.showAlert(message: kEmailSentSuccessMessage, isSuccess: true)
            break;
        case .failed:
            AppUtility.showAlert(message: kEmailSentFailureMessage, isSuccess: true)
            break;
        }
    })
}

使用断点查看发送或取消点击的确切内容。并确保您已在本地创建MailComposer对象。因为这个对象每次都要发送和取消邮件。

© www.soinside.com 2019 - 2024. All rights reserved.