MFMailComposeViewController未调用

时间:2017-03-17 19:22:45

标签: ios swift

我正在尝试在两个单元格中实现MFMailComposeViewController()(主题“反馈”和“反馈2”)。

当我选择每个单元格时,“反馈”效果很好,但不会调用“feedback2”。

这似乎并不困难,但我发现很难解决这个问题。

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

        tableView.deselectRow(at: indexPath, animated: true)

        if indexPath.row == 0 {
            let message = "hey download this app"
            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(["gmail.com"])

            mailCompose.setSubject("feedback")

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

            if MFMailComposeViewController.canSendMail()

            {

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

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

                mailCompose.mailComposeDelegate = self

                mailCompose.setToRecipients(["ba@mail.com"])

                mailCompose.setSubject("feedback2")

                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)

    }

1 个答案:

答案 0 :(得分:2)

您的else if indexPath.row == 2缩进了一个级别 - else引用了!MFMailComposeViewController.canSendMail(),而不是之前的indexPath支票。你需要将该分支向外移动一级以获得你想要的效果。

对于将来,如果您为所有邮件编写重构单个方法,则可能更容易调试:

private func sendMail(to recipient: String, subject: String) {
    if !MFMailComposeViewController.canSendMail() {
        return
    }

    let mailCompose = MFMailComposeViewController()
    mailCompose.mailComposeDelegate = self
    mailCompose.setToRecipients([recipient])
    mailCompose.setSubject(subject)
    mailCompose.setMessageBody("text", isHTML: false)
    self.present(mailCompose, animated: true, completion: nil)
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    switch indexPath.row {
        case 0: /* activity view controller stuff */ break;
        case 1:
            sendMail(to: "gmail.com", subject: "feedback")
            break;
        case 2:
            sendMail(to: "ba@mail.com", subject: "feedback2")
            break;
    }
}