iOS 系统发邮件,发短信,打电话,粘贴板

时间:2022-11-10 12:57:09

1、要想利用系统的邮箱系统,首先需要包函头文件,

#import <MessageUI/MFMailComposeViewController.h>
// #import <MessageUI/MessageUI.h> // 导入这个头文件的话,也可以(包含邮件,信息头文件)

2、发送邮件有2中方式,建议用真机调试,
(1)直接使用[[UIApplication sharedApplication]openURL:]方式打来,但是缺点就是在操作完邮件(发送,取消)之后,不会跳回到当前的应用程序,而是停留在邮件界面,并且不能设置其他的属性,这个不需要遵守代理,

   if ([MFMailComposeViewController canSendMail]) { // 判断是非可以发送邮件
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:[NSString stringWithFormat:@"mailto://%@",@"XXX@qq.com"]]];
} else {
NSLog(@"暂不支持发送邮件");
}
(2)遵守邮件的代理,MFMailComposeViewControllerDelegate,设置代理,实现代理方法,这个方法的优点就是,在当前页面调用邮件界面,操作完成之后,会停留在当前界面的,
if ([MFMailComposeViewController canSendMail]) { // 判断是非可以发送邮件
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];
mailVC.mailComposeDelegate = self; // 不要使用mailVC.delegate代理,用这个代理的话,下面的代理是不调用的

[mailVC setSubject:@"hahahahah"]; // 设置邮件主题
[mailVC setToRecipients:@[@"XXX@docy.co"]]; // 设置接收者(发送给谁),可以有多个
[mailVC setCcRecipients:@[@"aaa@docy.co",@"bbb@docy.co"]]; // 设置抄送者(抄送给谁),可以有多个
[mailVC setBccRecipients:@[@"qqq@docy.co",@"www@docy.co"]];// 设置密送者(密送给谁),可以有多个
[mailVC setMessageBody:@"behvfebuyvbdyusefvdv" isHTML:NO]; // 设置邮件发送内容
// [mailVC addAttachmentData:<#(nonnull NSData *)#> mimeType:<#(nonnull NSString *)#> fileName:<#(nonnull NSString *)#>] // 给邮件添加附件(文件等)
[self presentViewController:mailVC animated:YES completion:nil];
} else {
NSLog(@"暂不支持发送邮件");
}
代理方法:回调结果有4中
MFMailComposeResultCancelled, // 取消
MFMailComposeResultSaved, // 保存
MFMailComposeResultSent, // 发送成功
MFMailComposeResultFailed // 发送失败
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{

if (MFMailComposeResultCancelled == result || result == MFMailComposeResultFailed) {
NSLog(@"取消发送");
} else if (result == MFMailComposeResultSent){
NSLog(@"发送成功");
}
[self dismissViewControllerAnimated:YES completion:nil];
}

系统的邮件发送的内容就那么多,其实用起来很简单的,下面介绍一下系统信息的使用。

3、系统发短信的调用和邮件的方式差不多,首先你需要包含头文件,

#import <MessageUI/MFMessageComposeViewController.h>
#import <MessageUI/MessageUI.h> // 导入这个头文件的话,也可以(包含邮件,信息头文件)

4、系统的发短信调用同样有2中方式,
(1)利用[[UIApplication sharedApplication]openURL:]方式打来,但是缺点就是在操作完(发送,取消)之后,不会跳回到当前的应用程序,不能设置其他的属性,这个不需要遵守代理,

if ([MFMessageComposeViewController canSendText]) { // 判断是否可以发送信息
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://13888888888"]];

} else {
NSLog(@"暂不支持发送信息");
}

(2)使用代理方式调用发短信,首先遵守代理MFMessageComposeViewControllerDelegate,设置代理,实现代理方法,这个方法的优点就是,在当前页面调用发短信界面,操作完成之后,会停留在当前界面的,设置代理的时候注意一下,

if ([MFMessageComposeViewController canSendText]) { // 判断是否可以发送信息
MFMessageComposeViewController *message = [[MFMessageComposeViewController alloc] init];
message.messageComposeDelegate = self; // 设置代理(不是message.delegate,这个代理是操作导航栏的代理)

message.recipients = @[@"11111122222",@"22222222222"]; // 设置信息接收着
message.body = @"hahah"; // 设置发送内容(输入框中的信息)
message.navigationBar.tintColor = [UIColor redColor];

[self presentViewController:message animated:YES completion:nil];

} else {
NSLog(@"暂不支持发送信息");
}

然后实现代理,不然的话,操作完成之后,短信界面不消失,

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

// MessageComposeResultCancelled,
// MessageComposeResultSent,
// MessageComposeResultFailed

if (result == MessageComposeResultCancelled) {
NSLog(@"取消发送");
} else if (result == MessageComposeResultSent) {
NSLog(@"发送成功");
} else if (result == MessageComposeResultFailed) {
NSLog(@"发送失败");
}
[controller dismissViewControllerAnimated:YES completion:nil];
}

短信的操作基本上就那么多了。
5、系统的拨打电话,直接调用一个方法就可以了,

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:@"tel://18888888888"]];

6、系统的粘贴板
系统的粘贴板其实很简单,就是在UIPasteboard类中的,

    UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
// pasteboard.string=@"aaaaaaa"; // 复制文本
// pasteboard.strings = @[@"wwwww",@"eeee"]; // 同时复制多个文本
pasteboard.image = [UIImage imageNamed:@"1"]; // 复制文本
// pasteboard.images = @[[UIImage imageNamed:@"1"],[UIImage imageNamed:@"2"]]; // 同时复制多个图片
pasteboard.color = [UIColor redColor]; // 复制文本
// pasteboard.colors = @[[UIColor redColor],[UIColor redColor]]; // 同时复制多个颜色

一般粘贴信息的话,就用到string属性就可以了。