·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> iOS-----MFMessageCompose和MFMailComposeViewController的使用方法

iOS-----MFMessageCompose和MFMailComposeViewController的使用方法

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

MFMessageCompose 和 MFMailComposeViewController的使用方法

使用MFMessageComposeViewCOntroller发短信

应用想自己提供界面让用户输入短信收件人地址、短信内容、主体、附件等短信内容,则可使用MFMessageComposeViewController来发送短信,它也是一个视图控制器,继承UINavigationController.

MFMessageComposeViewController提供了如下类方法判断iOS设备是否支持发送短信.

+ canSendText:

该iOS设备是否支持发送文本短信.

+ canSendAttachments:

该iOS设备是否支持发送带附件的短信

+ canSendSubject:

该iOS设备是否支持发送带标题的短信

程序使用MFMessageComposeViewController的类方法进行判断之后,接下来就可按如下步骤发送短信.

1

创建MFMessageComposeViewController对象

2

为MFMessageComposeViewController设置recipients(接受NSArray作为属性值,用于设置多个收件人号码)、subject(设置短信主题)、body(设置短信内容)、attachments(接受NSArray作为属性值,用于设置多个附件)等属性

3

为MFMessageComposeViewController设置messageComposeDelegate,该属性值必须是一个实现MFMessageComposeViewControllerDelegate协议的对象.该协议中定义了一个必须实现的messageComposeViewComtroller:didFinishWithResult:方法,该方法负责处理短信的发送结果.

  1 @interface LCViewController()<MFMessageComposeViewControllerDelegate>
  2 
  3 @end
  4 
  5 @implementation LCViewController
  6 
  7 - (void)viewDidLoad
  8 
  9 {
 10 
 11    [super viewDidLoad];
 12 
 13 }
 14 
 15 - (IBAction)send:(id)sender
 16 
 17 {
 18 
 19    NSString* destStr = self.destField.text;
 20 
 21    NSString* contentStr = self.contentField.text;
 22 
 23    if(destStr != nil && destStr.length>0 && contentStr != nil && destStr.length > 0 )
 24 
 25    {
 26 
 27        // 如果能发送文本信息
 28 
 29       if([MFMessageComposeViewController canSendText])
 30 
 31       {
 32 
 33 // 创建MFMessageComposeViewController对象
 34 
 35 MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
 36 
 37 // 为MFMessageComposeViewController对象指定messageComposeDelegate
 38 
 39 picker.messageComposeDelegate = self;
 40 
 41 picker.navigationBar.tintColor = [UIColor blackColor];
 42 
 43 // 设置收件人,此处可通过NSArray集合指定多个收件人
 44 
 45 picker.recipients = [NSArray arrayWithObject:destStr];
 46 
 47 // 设置短信内容
 48 
 49 picker.body = contenStr;
 50 
 51 /*
 52 
 53   如果运营商支持,picker还支持指定subjecy(主题)和attachments(附件)
 54 
 55   也可用addAttachmentURL:withAlternateFilename:或addAttachmentData:typeIdentifier:filename:方法添加附件
 56 
 57 */
 58 
 59 // 显示MFMessageComposeViewController控制器
 60 
 61 [self persentViewController:picker animated:YES completion:nil];
 62 
 63 }  
 64 
 65 }
 66 
 67 }
 68 
 69 //  MFMessageComposeViewControllerDelegate协议中的方法,负责处理短信的发送结果
 70 
 71 - (void)messageComposeViewController:(MFMessageComposeViewController*)controller didFinishWithResult:(MessageComposeResult)result
 72 
 73 {
 74 
 75 switch(result)
 76 
 77 {
 78 
 79   case MessageComposeResultCancelled:
 80 
 81       [self showAlert:@”结果: 短信被取消发送”];
 82 
 83       break;
 84 
 85   case MessageComposeResultSent:
 86 
 87       [self showAlert:@”结果: 发送成功”];
 88 
 89       break;
 90 
 91   case MessageComposeResultFailed:
 92 
 93       [self showAlert:@”结果: 发送失败”];
 94 
 95         break;
 96 
 97    default:
 98 
 99       [self showAlert:@”结果: 没有发送短信”];
100 
101     break;
102 
103 }
104 
105 [self dismissViewControllerAnimated:YES completion:nil];
106 
107 }
108 
109 - (void)showAlert:(NSString *)msg
110 
111 {
112 
113 [[[UIAlertView alloc] initWithTitle:@”发送结果” message:msg delegate:nil cancelButtonTitle:@”确 定” otherButtonTitles:nil] show];
114 
115 }
116 
117 @end

 

创建了一个MFMessageComposeViewController对象,并为该对象设置了recipents(收件人)、body(短信内容),并将该视图控制器本身设为它的messageComposeDelegate,因此该视图控制器类实现了MFMessageComposeViewControllerDelegate协议,并实现该协议中的方法----该方法负责处理发送短信的结果。

 

     

使用MFMailComposeViewController发送邮件

MFMailComposeViewController与MFMessageComposeViewController的用法非常相似,只是功能不同而已------MFMailComposeViewController用于发送邮件。

     MFMailComposeViewController提供了如下类方法判断iOS设备是否支持发送邮件。

        + canSendMail: 该iOS设备是否支持发送邮件.

程序使用MFMailComposeViewController的类方法进行判断之后,接下来就可按如下步骤发送邮件.

  1. 创建MFMailComposeViewController对象
  2. 为MFMailComposeViewController设置toRecipients: (接受NSArray作为属性值,用于设置多个收件人地址)、ccRecipients:(接受NSArray作为属性值,用于设置多个抄送人地址)、bccRecipients:(接收NSArray作为属性值,用于设置多个密送人地址)、subject(设置邮件主题),还可通过setMessageBody:isHTML:方法设置邮件正文,通过addAttachmentData:mimeType:filename:方法添加附件.
  3. 为MFMailComposeViewController设置mailComposeDelegate,该属性值必须是一个实现MFMailComposeViewControllerDelegate协议的对象.该协议中定义了一个必须实现的mailComposeController:didFinishWithResult:error:方法,该方法负责处理邮件的发送结果.

  1 @interface LCViewController()<MFMailComposeViewControllerDelegate>
  2 
  3 @end
  4 
  5 @implementation LCViewController
  6 
  7 -(void)viewDidLoad
  8 
  9 {
 10 
 11    [super viewDidLoad];
 12 
 13 }
 14 
 15 -(IBAction)sendMail:(id)sender
 16 
 17 {
 18 
 19   // 获取界面上用户输入的内容
 20 
 21   NSString* toStr = self.toField.text;// 收件人地址
 22 
 23   NSString* ccStr = self.ccField.text;// 抄送人地址
 24 
 25   NSString* bccStr = self.bccField.text;// 密送人地址
 26 
 27   NSString* subjectStr = self.subjectField.text;// 邮件主题
 28 
 29 NSString* contentStr = self.contentField.text;// 邮件正文
 30 
 31 if(toStr != nil && toStr.length > 0
 32 
 33 && subjectStr != nil && subjectStr.length > 0
 34 
 35 && contentStr != nil && contentStr.length > 0)
 36 
 37 {
 38 
 39   // 如果能发送邮件
 40 
 41   if([MFMailComposeViewController canSendMail])
 42 
 43 {
 44 
 45   // 创建MFMailComposeViewController对象
 46 
 47  MFMailComposeViewController *picker = [[MFMailComposeViewController alloc]  init];
 48 
 49 // 为 MFMailComposeViewController对象指定mailComposeDelegate
 50 
 51 picker.mailComposeDelegate = self;
 52 
 53 picker.navigationBar.tintColor = [UIColor blackColor];
 54 
 55 // 设置收件人,此处可通过NSArray集合指定多个收件人
 56 
 57 picker.toRecipients = [NSArray arrayWithObject:toStr];
 58 
 59 if(ccStr != nil && ccStr.length > 0)
 60 
 61 {
 62 
 63   // 设置抄送人,此处可通过NSArray集合指定多个抄送人
 64 
 65  picker.ccRecipients = [NSArray arrayWithObject:ccStr];
 66 
 67 }
 68 
 69 if(bccStr != nil && bccStr.length > 0)
 70 
 71 {
 72 
 73   // 设置密送人,此处可用过NSArray集合指定多个密送人
 74 
 75   picker.bccRecipients = [NSArray arrayWithObject:bccStr];
 76 
 77 }
 78 
 79 // 设置邮件主题
 80 
 81 picker.subject = subjectStr;
 82 
 83 // 设置邮件正文
 84 
 85 [picker setMessageBody:contentStr isHTML:NO];
 86 
 87 // 显示MFMailComposeViewController控制器
 88 
 89 [self persentViewController:picker animated:YES completion:nil];
 90 
 91 }
 92 
 93 }
 94 
 95 }
 96 
 97 -(IBAction)finishEdit:(id)sender
 98 
 99 {
100 
101   [sender resignFirstResponder];
102 
103 }
104 
105 -(void)mailComposeController:(MFMailComposeViewController*)controller
106 
107   didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
108 
109 {
110 
111   switch(result)
112 
113   {
114 
115 case  MFMailComposeResultCancelled:
116 
117      [self showAlert:@”结果: 邮件被取消发送”];
118 
119      break;
120 
121 case  MFMailComposeResultSent:
122 
123     [self showAlert:@”结果: 发送成功”];
124 
125     break;
126 
127 case  MFMailComposeResultFailed:
128 
129     [self showAlert:@”结果: 发送失败”];
130 
131     break;
132 
133 case  MFMailComposeResultSaved:
134 
135     [self showAlert:@”结果: 邮件被保存了”];
136 
137     break;
138 
139 }
140 
141 [self dismissViewControllerAnimated:YES completion:nil];
142 
143 }
144 
145 -(void)showAlert:(NSString *)msg
146 
147 {
148 
149   [ [ [ UIAlertView alloc] initWithTitle:@”发送结果”  message:msg delegate:nil cancelButtonTitle:@”确定” otherButtonTitles:nil] show];
150 
151 }
152 
153 @end

 

// 上面程序中的粗体字代码创建了一个MFMailComposeViewController对象,并为该对象设置了toRecipients(收件人地址)、ccRecipients(抄送人地址)、bccRecipients(密送人地址),还调用了setMessageBody:contentStr isHTML:方法设置邮件正文,并将该视图控制器本身设为它的mailComposeDelegate,因此该视图控制器类实现MFMailComposeViewControllerDelegate协议,并实现了该协议中的方法----该方法负责处理发送邮件的结果。

// 编译、运行该程序(必须在真机中运行,模拟器不支持),在程序界面中输入收件人地址、抄送地址、密送人地址、邮件主题、邮件正文,然后单击“发送”按钮,将可以看到如下图所示的界面