iOS10打電話、發短信、發郵件等小功能

注意: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]; }
相關文章
相關標籤/搜索