MFMailComposeViewController在iOS 8 Xcode 6中无法编辑

3
我正在使用以下代码展示电子邮件表单。虽然表单出现了,但是我无法编辑主题和正文。我甚至不能按取消或发送按钮。以下是我的实现代码:
class PeopleListTableViewController: UITableViewController,SWTableViewCellDelegate,UINavigationControllerDelegate,MFMailComposeViewControllerDelegate, NSXMLParserDelegate {

 func showEmailSheet(person :Person) {

        if MFMailComposeViewController.canSendMail() {

            let mailViewController = MFMailComposeViewController()
            mailViewController.mailComposeDelegate = self

            mailViewController.setToRecipients([person.email!])

            self.presentViewController(mailViewController, animated: true, completion: nil)

        }
    }

我做错了什么?

在真实设备上测试,并设置电子邮件账户。 - gabbler
是的,我正在真实的物理设备上进行测试。 - john doe
你的代码对我有效。只需进行小修改:mailViewController.setToRecipients(["abc@gmail.com"]) - gabbler
3个回答

4

这是我项目中的一段可用代码。请确保在iOS设备上使用表单,而不是模拟器。

import UIKit
import MessageUI

class ViewController: UIViewController, MFMailComposeViewControllerDelegate {
    @IBAction func launchEmail(sender: AnyObject) {

        var emailTitle = "Feedback"
        var messageBody = "Feature request or bug report?"
        var toRecipents = ["youraddress@gmail.com"]
        var mc: MFMailComposeViewController = MFMailComposeViewController()
        mc.mailComposeDelegate = self
        mc.setSubject(emailTitle)
        mc.setMessageBody(messageBody, isHTML: false)
        mc.setToRecipients(toRecipents)

        self.presentViewController(mc, animated: true, completion: nil)
    }

    func mailComposeController(controller:MFMailComposeViewController, didFinishWithResult result:MFMailComposeResult, error:NSError) {
        switch result.value {
        case MFMailComposeResultCancelled.value:
            println("Mail cancelled")
        case MFMailComposeResultSaved.value:
            println("Mail saved")
        case MFMailComposeResultSent.value:
            println("Mail sent")
        case MFMailComposeResultFailed.value:
            println("Mail sent failure: %@", [error.localizedDescription])
        default:
            break
        }
        self.dismissViewControllerAnimated(true, completion: nil)
    }
}

我使用了你的代码,但仍然无法编辑电子邮件表单。它被冻结了。我在控制台中看到了一堆自动布局错误。 - john doe
是的,我正在使用真实设备! - john doe
XCODE 6.0.1,已在使用iOS 7.1的iPhone %s 上进行测试。我使用我的完整代码更新了代码,并将其粘贴到一个空项目中,连接了一个按钮并运行它。可行。接下来将会在iOS8设备上进行测试。 - Steve Rosenberg
对我来说真是个谜!我的电脑死机了,甚至无法关闭邮件撰写窗口! - john doe
我认为这不是自动布局的问题。如果一个空项目可以使用这段代码,那么就有其他问题。如果你感到沮丧并愿意在 Github 上发布,我可以帮你看看。 - Steve Rosenberg
显示剩余10条评论

1
我在Xcode6和iOS8下遇到了同样的问题。但是我注意到这似乎是模拟器的问题。以下代码在iOS8上可以工作,但只能在设备上(而不能在模拟器上)!
MFMailComposeViewController *composer = [[MFMailComposeViewController alloc] init];
if([MFMailComposeViewController canSendMail]) {
    composer.mailComposeDelegate = self;

    messageContent=[NSString stringWithFormat:@"Bla bla"];

    [composer setSubject:@"The subject"];
    [composer setMessageBody:messageContent isHTML:NO];
    [composer setToRecipients:[NSArray arrayWithObject:[NSString stringWithFormat:@"Vincent@xxxxx.com"]]];

    [composer setCcRecipients:nil];
    [composer setBccRecipients:nil];
    [composer setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];

    [self presentViewController:composer animated:YES completion:nil];
}

0

我提供这个简单的解决方案:

//outlet & btns
@IBOutlet weak var forgotEmail: UITextField!

@IBAction func resetPW(sender: AnyObject) {
    // send email
    var mailer = MFMailComposeViewController()
    mailer.mailComposeDelegate = self
    mailer.setSubject("Forgot Password")
    mailer.setToRecipients(["admin@someMail.com"])

    presentViewController(mailer, animated:true, completion: nil)

}

附注: "setToRecipients" 仅适用于真实设备,而不适用于模拟器!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接