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@interfaceLCViewController()<MFMessageComposeViewControllerDelegate>23@end45@implementationLCViewController67- (void)viewDidLoad89{1011[super viewDidLoad];1213}1415- (IBAction)send:(id)sender1617{1819NSString* destStr =self.destField.text;2021NSString* contentStr =self.contentField.text;2223if(destStr != nil && destStr.length>0&& contentStr != nil && destStr.length >0)2425{2627//如果能发送文本信息2829if([MFMessageComposeViewController canSendText])3031{3233//创建MFMessageComposeViewController对象3435MFMessageComposeViewController *picker =[[MFMessageComposeViewController alloc] init];3637//为MFMessageComposeViewController对象指定messageComposeDelegate3839picker.messageComposeDelegate =self;4041picker.navigationBar.tintColor =[UIColor blackColor];4243//设置收件人,此处可通过NSArray集合指定多个收件人4445picker.recipients =[NSArray arrayWithObject:destStr];4647//设置短信内容4849picker.body =contenStr;5051/*5253如果运营商支持,picker还支持指定subjecy(主题)和attachments(附件)5455也可用addAttachmentURL:withAlternateFilename:或addAttachmentData:typeIdentifier:filename:方法添加附件5657*/5859//显示MFMessageComposeViewController控制器6061[self persentViewController:picker animated:YES completion:nil];6263}6465}6667}6869//MFMessageComposeViewControllerDelegate协议中的方法,负责处理短信的发送结果7071- (void)messageComposeViewController:(MFMessageComposeViewController*)controller didFinishWithResult:(MessageComposeResult)result7273{7475switch(result)7677{7879caseMessageComposeResultCancelled:8081[self showAlert:@”结果: 短信被取消发送”];8283
break;8485caseMessageComposeResultSent:8687[self showAlert:@”结果: 发送成功”];8889
break;9091caseMessageComposeResultFailed:9293[self showAlert:@”结果: 发送失败”];9495
break;9697default:9899[self showAlert:@”结果: 没有发送短信”];100101
break;102103}104105[self dismissViewControllerAnimated:YES completion:nil];106107}108109- (void)showAlert:(NSString *)msg110111{112113[[[UIAlertView alloc] initWithTitle:@”发送结果” message:msgdelegate:nil cancelButtonTitle:@”确 定” otherButtonTitles:nil] show];114115}116117@end
创建了一个MFMessageComposeViewController对象,并为该对象设置了recipents(收件人)、body(短信内容),并将该视图控制器本身设为它的messageComposeDelegate,因此该视图控制器类实现了MFMessageComposeViewControllerDelegate协议,并实现该协议中的方法----该方法负责处理发送短信的结果。
使用MFMailComposeViewController发送邮件
MFMailComposeViewController与MFMessageComposeViewController的用法非常相似,只是功能不同而已------MFMailComposeViewController用于发送邮件。
MFMailComposeViewController提供了如下类方法判断iOS设备是否支持发送邮件。
+canSendMail: 该iOS设备是否支持发送邮件.
程序使用MFMailComposeViewController的类方法进行判断之后,接下来就可按如下步骤发送邮件.
创建MFMailComposeViewController对象为MFMailComposeViewController设置toRecipients: (接受NSArray作为属性值,用于设置多个收件人地址)、ccRecipients:(接受NSArray作为属性值,用于设置多个抄送人地址)、bccRecipients:(接收NSArray作为属性值,用于设置多个密送人地址)、subject(设置邮件主题),还可通过setMessageBody:isHTML:方法设置邮件正文,通过addAttachmentData:mimeType:filename:方法添加附件.为MFMailComposeViewController设置mailComposeDelegate,该属性值必须是一个实现MFMailComposeViewControllerDelegate协议的对象.该协议中定义了一个必须实现的mailComposeController:didFinishWithResult:error:方法,该方法负责处理邮件的发送结果.代
码
片
段
1@interfaceLCViewController()<MFMailComposeViewControllerDelegate>23@end45@implementationLCViewController67-(void)viewDidLoad89{1011[super viewDidLoad];1213}1415-(IBAction)sendMail:(id)sender1617{1819//获取界面上用户输入的内容2021NSString* toStr = self.toField.text;//收件人地址2223NSString* ccStr = self.ccField.text;//抄送人地址2425NSString* bccStr = self.bccField.text;//密送人地址2627NSString* subjectStr = self.subjectField.text;//邮件主题2829NSString* contentStr = self.contentField.text;//邮件正文3031if(toStr != nil && toStr.length >03233&& subjectStr != nil && subjectStr.length >03435&& contentStr != nil && contentStr.length >0)3637{3839//如果能发送邮件4041if([MFMailComposeViewController canSendMail])4243{4445//创建MFMailComposeViewController对象4647MFMailComposeViewController *picker =[[MFMailComposeViewController alloc] init];4849//为 MFMailComposeViewController对象指定mailComposeDelegate5051picker.mailComposeDelegate =self;5253picker.navigationBar.tintColor =[UIColor blackColor];5455//设置收件人,此处可通过NSArray集合指定多个收件人5657picker.toRecipients =[NSArray arrayWithObject:toStr];5859if(ccStr != nil && ccStr.length >0)6061{6263//设置抄送人,此处可通过NSArray集合指定多个抄送人6465picker.ccRecipients =[NSArray arrayWithObject:ccStr];6667}6869if(bccStr != nil && bccStr.length >0)7071{7273//设置密送人,此处可用过NSArray集合指定多个密送人7475picker.bccRecipients =[NSArray arrayWithObject:bccStr];7677}7879//设置邮件主题8081picker.subject =subjectStr;8283//设置邮件正文8485[picker setMessageBody:contentStr isHTML:NO];8687//显示MFMailComposeViewController控制器8889[self persentViewController:picker animated:YES completion:nil];9091}9293}9495}9697-(IBAction)finishEdit:(id)sender9899{100101[sender resignFirstResponder];102103}104105-(void)mailComposeController:(MFMailComposeViewController*)controller106107didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error108109{110111switch(result)112113{114115caseMFMailComposeResultCancelled:116117[self showAlert:@”结果: 邮件被取消发送”];118119
break;120121caseMFMailComposeResultSent:122123[self showAlert:@”结果: 发送成功”];124125
break;126127caseMFMailComposeResultFailed:128129[self showAlert:@”结果: 发送失败”];130131
break;132133caseMFMailComposeResultSaved:134135[self showAlert:@”结果: 邮件被保存了”];136137
break;138139}140141[self dismissViewControllerAnimated:YES completion:nil];142143}144145-(void)showAlert:(NSString *)msg146147{148149[ [ [ UIAlertView alloc] initWithTitle:@”发送结果” message:msgdelegate:nil cancelButtonTitle:@”确定” otherButtonTitles:nil] show];150151}152153@end
// 上面程序中的粗体字代码创建了一个MFMailComposeViewController对象,并为该对象设置了toRecipients(收件人地址)、ccRecipients(抄送人地址)、bccRecipients(密送人地址),还调用了setMessageBody:contentStr isHTML:方法设置邮件正文,并将该视图控制器本身设为它的mailComposeDelegate,因此该视图控制器类实现MFMailComposeViewControllerDelegate协议,并实现了该协议中的方法----该方法负责处理发送邮件的结果。
// 编译、运行该程序(必须在真机中运行,模拟器不支持),在程序界面中输入收件人地址、抄送地址、密送人地址、邮件主题、邮件正文,然后单击“发送”按钮,将可以看到如下图所示的界面