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:方法,该方法负责处理短信的发送结果.

 @interface LCViewController()<MFMessageComposeViewControllerDelegate>

 @end

 @implementation LCViewController

 - (void)viewDidLoad

 {

    [super viewDidLoad];

 }

 - (IBAction)send:(id)sender

 {

    NSString* destStr = self.destField.text;

    NSString* contentStr = self.contentField.text;

    if(destStr != nil && destStr.length> && contentStr != nil && destStr.length >  )

    {

        // 如果能发送文本信息

       if([MFMessageComposeViewController canSendText])

       {

 // 创建MFMessageComposeViewController对象

 MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];

 // 为MFMessageComposeViewController对象指定messageComposeDelegate

 picker.messageComposeDelegate = self;

 picker.navigationBar.tintColor = [UIColor blackColor];

 // 设置收件人,此处可通过NSArray集合指定多个收件人

 picker.recipients = [NSArray arrayWithObject:destStr];

 // 设置短信内容

 picker.body = contenStr;

 /*

   如果运营商支持,picker还支持指定subjecy(主题)和attachments(附件)

   也可用addAttachmentURL:withAlternateFilename:或addAttachmentData:typeIdentifier:filename:方法添加附件

 */

 // 显示MFMessageComposeViewController控制器

 [self persentViewController:picker animated:YES completion:nil];

 }  

 }

 }

 //  MFMessageComposeViewControllerDelegate协议中的方法,负责处理短信的发送结果

 - (void)messageComposeViewController:(MFMessageComposeViewController*)controller didFinishWithResult:(MessageComposeResult)result

 {

 switch(result)

 {

   case MessageComposeResultCancelled:

       [self showAlert:@”结果: 短信被取消发送”];

       break;

   case MessageComposeResultSent:

       [self showAlert:@”结果: 发送成功”];

       break;

   case MessageComposeResultFailed:

       [self showAlert:@”结果: 发送失败”];

         break;

    default:

       [self showAlert:@”结果: 没有发送短信”];

     break;

 }

 [self dismissViewControllerAnimated:YES completion:nil];

 }

 - (void)showAlert:(NSString *)msg

 {

 [[[UIAlertView alloc] initWithTitle:@”发送结果” message:msg delegate:nil cancelButtonTitle:@”确 定” otherButtonTitles:nil] show];

 }

 @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:方法,该方法负责处理邮件的发送结果.

 @interface LCViewController()<MFMailComposeViewControllerDelegate>

 @end

 @implementation LCViewController

 -(void)viewDidLoad

 {

    [super viewDidLoad];

 }

 -(IBAction)sendMail:(id)sender

 {

   // 获取界面上用户输入的内容

   NSString* toStr = self.toField.text;// 收件人地址

   NSString* ccStr = self.ccField.text;// 抄送人地址

   NSString* bccStr = self.bccField.text;// 密送人地址

   NSString* subjectStr = self.subjectField.text;// 邮件主题

 NSString* contentStr = self.contentField.text;// 邮件正文

 if(toStr != nil && toStr.length > 

 && subjectStr != nil && subjectStr.length > 

 && contentStr != nil && contentStr.length > )

 {

   // 如果能发送邮件

   if([MFMailComposeViewController canSendMail])

 {

   // 创建MFMailComposeViewController对象

  MFMailComposeViewController *picker = [[MFMailComposeViewController alloc]  init];

 // 为 MFMailComposeViewController对象指定mailComposeDelegate

 picker.mailComposeDelegate = self;

 picker.navigationBar.tintColor = [UIColor blackColor];

 // 设置收件人,此处可通过NSArray集合指定多个收件人

 picker.toRecipients = [NSArray arrayWithObject:toStr];

 if(ccStr != nil && ccStr.length > )

 {

   // 设置抄送人,此处可通过NSArray集合指定多个抄送人

  picker.ccRecipients = [NSArray arrayWithObject:ccStr];

 }

 if(bccStr != nil && bccStr.length > )

 {

   // 设置密送人,此处可用过NSArray集合指定多个密送人

   picker.bccRecipients = [NSArray arrayWithObject:bccStr];

 }

 // 设置邮件主题

 picker.subject = subjectStr;

 // 设置邮件正文

 [picker setMessageBody:contentStr isHTML:NO];

 // 显示MFMailComposeViewController控制器

 [self persentViewController:picker animated:YES completion:nil];

 }

 }

 }

 -(IBAction)finishEdit:(id)sender

 {

   [sender resignFirstResponder];

 }

 -(void)mailComposeController:(MFMailComposeViewController*)controller

   didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error

 {

   switch(result)

   {

 case  MFMailComposeResultCancelled:

      [self showAlert:@”结果: 邮件被取消发送”];

      break;

 case  MFMailComposeResultSent:

     [self showAlert:@”结果: 发送成功”];

     break;

 case  MFMailComposeResultFailed:

     [self showAlert:@”结果: 发送失败”];

     break;

 case  MFMailComposeResultSaved:

     [self showAlert:@”结果: 邮件被保存了”];

     break;

 }

 [self dismissViewControllerAnimated:YES completion:nil];

 }

 -(void)showAlert:(NSString *)msg

 {

   [ [ [ UIAlertView alloc] initWithTitle:@”发送结果”  message:msg delegate:nil cancelButtonTitle:@”确定” otherButtonTitles:nil] show];

 }

 @end

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

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

iOS-----MFMessageCompose 和 MFMailComposeViewController的使用方法的更多相关文章

  1. IOS发送Email的两种方法

    IOS系统框架提供的两种发送Email的方法:openURL 和 MFMailComposeViewController.借助这两个方法,我们可以轻松的在应用里加入如用户反馈这类需要发送邮件的功能. ...

  2. iOS开发 GET、POST请求方法(NSURLSession篇)

    NSURLConnection,在iOS9被宣布弃用,本文不使用NSURLConnection进行网络编程,有兴趣的童鞋可以参考: [iOS开发 GET.POST请求方法(NSURLConnectio ...

  3. iOS开发 GET、POST请求方法(NSURLConnection篇)

    Web Service使用的主要协议是HTTP协议,即超文本传输协议. HTTP/1.1协议共定义了8种请求方法(OPTIONS.HEAD.GET.POST.PUT.DELETE.TRACE.CONN ...

  4. IOS中图片拉伸技巧与方法总结(转载)

    以下内容转载自:http://my.oschina.net/u/2340880/blog/403996 IOS中图片拉伸技巧与方法总结 一.了解几个图像拉伸的函数和方法 1.直接拉伸法 简单暴力,却是 ...

  5. iOS——浅谈iOS中三种生成随机数方法

    ios 有如下三种随机数方法:

  6. iOS项目的完整重命名方法图文教程

    原文链接:http://www.cocoachina.com/ios/20150104/10824.html iOS项目的完整重命名方法图文教程 前言:在iOS开发中,有时候想改一下项目的名字,都会遇 ...

  7. iOS开发中的Html解析方法

    iOS开发中的Html解析方法 本文作者为大家介绍了在iOS开发中的Html解析方法,并同时提供了Demo代码的下载链接,Demo 解析了某个网站(具体可在代码中查看)的html网页,提取了图片以及标 ...

  8. IOS发送Email的两种方法-备

    1.openURL 使用openURL调用系统邮箱客户端是我们在IOS3.0以下实现发邮件功能的主要手段.我们可以通过设置url里的相关参数来指定邮件的内容,不过其缺点很明显,这样的过程会导致程序暂时 ...

  9. iOS开发 GET、POST请求方法:NSURLSession篇

    NSURLConnection,在iOS 9被宣布弃用,本文不使用NSURLConnection进行网络编程,有兴趣的童鞋可以参考: iOS开发 GET.POST请求方法(NSURLConnectio ...

随机推荐

  1. X-NUCA联赛WEB赛前指导write-up

    第一关 审查代码发现有隐藏的连接,访问,flag一闪而过.打开burpsuite,设置好代理,然后重新访问,在历史里找相应的回复包,得到flag. 第二关 审查元素 修改按钮为可用 抓获一个POST包 ...

  2. 异常来自 HRESULT:0x80070057 (E_INVALIDARG)

    莫名其妙的编译总会报错 异常来自 HRESULT:0x80070057 (E_INVALIDARG) 未能加载程序集....... 几次删除引用然后重新引用程序集还是报错 奔溃中.... 网上搜索还真 ...

  3. RMAN备份保留策略

    RMAN备份保留策略 定义备份保留策略有以下两种方式: 1.使用CONFIGURE RETENTION POLICY TO RECOVERY WINDOW命令. 例如:RMAN>CONFIGUR ...

  4. python学习之路-day10

    一.什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程. 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程. 车间负责把资源 ...

  5. 系统管理命令之tty

    在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下.你可以执行tty指令查询目前使用的终端机的文件名称. 1.命令帮助: # tty -- help ...

  6. 20145326 《Java程序设计》课程总结

    每周读书笔记链接汇总 20145326第1周学习总结 20145326第2周学习总结 20145326第3周学习总结 20145326第4周学习总结 20145326第5周学习总结 20145326第 ...

  7. Block作为参数时的使用

    Block作为参数使用,常见于各框架之中,比如在封装一个类时,当做什么事情由外界去决定,什么时候调用由自己的类决定时,这时候就需要将block作为参数使用. 下面我们模仿AFNetworking的ma ...

  8. HBuilder 获取通话记录 (Android)

    代码: Date.prototype.Format = function (fmt) { var o = { , //月份 "d+": this.getDate(), //日 == ...

  9. Spring 中好用的泛型操作API

    随着泛型用的越来越多,获取泛型实际类型信息的需求也会出现,如果用原生API,需要很多步操作才能获取到泛型,比如: ParameterizedType parameterizedType = (Para ...

  10. 记一次Servlet中getAttribute的错误.

    package com.ykmimi.order.servlet; import java.io.IOException; import javax.servlet.RequestDispatcher ...