如何在UIActionSheet中点击索引处的按钮时撰写邮件?

时间:2014-12-04 11:50:09

标签: ios iphone email uiactionsheet mfmailcomposeviewcontroller

当我点击UIActionSheet中的电子邮件选项时,我对如何显示邮件编辑器感到有些困惑。 这是我的示例代码:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if(buttonIndex == 0)
    {
        NSString *emailTitle = @"Test Email";
        NSString *messageBody = @"iOS programming is so fun!";
        NSArray *toRecipents = [NSArray arrayWithObject:@"support@email.com"];
        MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
        mc.mailComposeDelegate = self;
        [mc setSubject:emailTitle];
        [mc setMessageBody:messageBody isHTML:NO];
        [mc setToRecipients:toRecipents];
        [self presentViewController:mc animated:YES completion:NULL];
    }
}

3 个答案:

答案 0 :(得分:1)

确保添加到.h文件并导入MessageUI.framework

这正是您所寻找的。我常常使用它。顺便说一句,在iOS 8中不推荐使用UIActionSheets。在这里你可以看到:

·H

ViewController : UIViewController <MFMailComposeViewControllerDelegate>

的.m

- (IBAction)showActionSheet:(id)sender {

UIActionSheet *moreActions = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Add To Favorites", @"Search",@"Email", nil];
[moreActions showInView:self.view];
}

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

switch (buttonIndex) {
    case 0: [self addToFav:self];
        break;
    case 1: ; [self popSearchBar:self];
        break;
    case 2: { [self sendEmail];
        break;
    }
        break;
}
}
- (void)sendEmail {
NSString *emailTitle = @"This is email title";
// Email Content as for HTML
NSString *messageBody = [NSString stringWithFormat:@"I may have found a missing document in your catalog. I tried opening :<p><strong><font color=\"red\"> %@ </font><br>'%@'</strong></p> with no results. Can I have a dollar for reporting this?", self.title, self.titleString];
// To address
NSArray *toRecipents = [NSArray arrayWithObject:@"youremail@google.com"];

MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody isHTML:YES];
[mc setToRecipients:toRecipents];

// Present mail view controller on screen
[self presentViewController:mc animated:YES completion:NULL];

}
 - (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult: (MFMailComposeResult)result error:(NSError *)error
{
switch (result)
{
    case MFMailComposeResultCancelled:
        NSLog(@"Mail cancelled");
        [self dismissViewControllerAnimated:YES completion:NULL];
        break;
    case MFMailComposeResultSaved:
        NSLog(@"Mail saved");
        [self dismissViewControllerAnimated:YES completion:NULL];
        break;
    case MFMailComposeResultSent:
        NSLog(@"Mail sent");
        [self dismissViewControllerAnimated:YES completion:NULL];
        break;
    case MFMailComposeResultFailed:
        NSLog(@"Mail sent failure: %@", [error localizedDescription]);
        break;
    default:
        break;
}
// Close the Mail Interface
[self dismissViewControllerAnimated:YES completion:NULL];
}

另请注意,有些人在使用模拟器电子邮件时遇到问题。在放弃之前在设备上试一试。

答案 1 :(得分:1)

以下是代码:

首先添加并导入消息框架:

#import <MessageUI/MessageUI.h>

然后将自己标记为像这样的代表

@interface MYViewController () <MFMailComposeViewControllerDelegate>

然后拉起作曲家:

- (IBAction)emailButtonPressed:(id)sender
{
    if ([MFMailComposeViewController canSendMail]) {
        MFMailComposeViewController *composeViewController = [[MFMailComposeViewController alloc] initWithNibName:nil bundle:nil];
        [composeViewController setMailComposeDelegate:self];
        [composeViewController setToRecipients:@[@"example@email.com"]];
        [composeViewController setSubject:@"example subject"];
        [self presentViewController:composeViewController animated:YES completion:nil];
    }
}

然后处理委托回调并解雇作曲家:

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
    //Add an alert in case of failure
    [self dismissViewControllerAnimated:YES completion:nil];
}

在使用actionSheet: clickedButtonAtIndex:

的操作表中
    - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {

    //Get the name of the current pressed button
    NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];

    if  ([buttonTitle isEqualToString:@"Your button title"]) {
        [self btnContact];
    }

}

调用此方法

- (void)btnContact{
    // Email Subject
    NSString *emailTitle = @"";
    // Email Content
    NSString *messageBody = @"";
    // To address
    NSString *toRecp = @"";
    NSArray *toRecipents = [NSArray arrayWithObject:toRecp];

    MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
    mc.mailComposeDelegate = self;
    [mc setSubject:emailTitle];
    [mc setMessageBody:messageBody isHTML:NO];
    [mc setToRecipients:toRecipents];

    // Present mail view controller on screen
    [self presentViewController:mc animated:YES completion:NULL];
}

答案 2 :(得分:0)

这是appcoda的代码。而不是索引使用按钮的名称来激活您的邮件选项。