注意:iOS10.0之後,使用openURL會有延遲,須要使用web
openURL: options: completionHandler:
1、概要app
本文中主要就是介紹在iOS中實現打電話、發短信、發郵件三個功能。框架
每種功能都會給出不一樣的方法,親測有效~函數
一、打電話測試
(1)直接跳到撥號界面,代碼以下url
NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplication sharedApplication] openURL:url];
缺點:電話打完後,不會自動回到原應用,直接停留在通話記錄界面。spa
(2)撥號以前會彈框詢問,打完電話後能自動回到原應用。代碼以下:代理
NSURL *url = [NSURL URLWithString:@"telprompt://10010"]; [[UIApplication sharedApplication] openURL:url];
缺點:私有API,所以可能通不過蘋果官方審覈。若是是企業級應用(不須要上線appStore),可使用這個方法。code
(3)建立一個UIWebView來加載URL,撥完後能自動回到原應用。代碼以下:orm
UIWebView *webView = [[UIWebView alloc]init]; NSURL *url = [NSURL URLWithString:@"tel://10010"]; [webView loadRequest:[NSURLRequest requestWithURL:url ]];
推薦使用:
+ (void)callPhoneWithNumber:(NSString *)telephoneNumber { if (telephoneNumber.length == 0) { return; } NSString *callPhone = [NSString stringWithFormat:@"telprompt://%@", telephoneNumber]; CGFloat version = [[[UIDevice currentDevice]systemVersion]floatValue]; if (version >= 10.0) { /// 大於等於10.0系統使用此openURL方法 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone] options:@{} completionHandler:nil]; } else { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:callPhone]]; } }
據說但沒有驗證:
iOS10.2以前,那個是否肯定撥打電話的提示框須要本身添加展現;iOS10.2之後,系統自動添加展現。
二、發短信
(1)直接跳轉到發短信界面。代碼:
NSURL *url = [NSURL URLWithString:@"sms://10010"]; [[UIApplication sharedApplication] openURL:url];
缺點:不能定義發送短信的內容,且發完短信後不能自動回到原應用。
(2)使用MessageUI 框架發送短信,須要包含頭文件 #import <MessageUI/MessageUI.h>,代碼以下:
MFMessageComposeViewController *vc = [[MFMessageComposeViewController alloc]init]; //設置短信內容 vc.body = @"吃飯了沒"; //設置收件人列表 vc.recipients = @[@"10010",@"10086"]; //設置代理 vc.messageComposeDelegate = self; //顯示控制器 [self presentViewController:vc animated:YES completion:nil];
另外實現代理函數
/** * 點擊取消按鈕會自動調用 */ - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result { [controller dismissViewControllerAnimated:YES completion:nil]; }
三、發郵件
(1)用自帶的郵件客戶端,代碼以下:
NSURL *url = [NSURL URLWithString:@"mailto://10010@qq.com"]; [[UIApplication sharedApplication] openURL:url];
缺點:發完郵件後不會自動回到原應用。
(2)相似於發短信的第二種方法,使用MessageUI,代碼以下:
if(![MFMailComposeViewController canSendMail]) return; MFMailComposeViewController *vc = [[MFMailComposeViewController alloc] init]; //設置郵件主題 [vc setSubject:@"測試會議"]; //設置郵件內容 [vc setMessageBody:@"開會" isHTML:NO]; //設置收件人列表 [vc setToRecipients:@[@"test@qq.com"]]; //設置抄送人列表 [vc setCcRecipients:@[@"test1@qq.com"]]; //設置代理 vc.mailComposeDelegate = self; //顯示控制器 [self presentViewController:vc animated:YES completion:nil];
實現代理方法:
- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error { [controller dismissViewControllerAnimated:YES completion:nil]; }