今天把APP里常用小功能 例如發短信、發郵件、打電話。
全部拿出來簡單說說它們的實現思路。
實現打電話的功能,主要二種方法,下面我就分別說說它們的優缺點。
// 直接撥號,撥號完成后會停留在通話記錄中
NSURL *url = [NSURL URLWithString:@"sms://10010"];
[[UIapplication sharedApplication] openURL:url];
如果自定義短信,需要使用一個框架MessageUI。
優點
1. 從應用出去能回來
2. 可以多人
3. 可以自定義消息,消息支持HTML格式的
而且如果在蘋果系統中,如果彼此的手機都是iOS設備,并且開通了iMessage功能,彼此之間的短信
是走網絡通道,而不走運營商的通道!
- (void)msg2{ // 判斷用戶設備能否發送短信 if (![MFMessageComposeViewController canSendText]) { return; } // 1. 實例化一個控制器 MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; // 2. 設置短信內容 // 1) 收件人 controller.recipients = @[@"10010", @"10086"]; // 2) 短信內容 controller.body = @"給您拜個晚年,祝您晚年快樂!"; // 3) 設置代理 controller.messageComposeDelegate = self; // 3. 顯示短信控制器 [self PResentViewController:controller animated:YES completion:nil];}
記得發完短信記得調用代理方法關閉窗口
#pragma mark 短信控制器代理方法/** 短信發送結果 MessageComposeResultCancelled, 取消 MessageComposeResultSent, 發送 MessageComposeResultFailed 失敗 */- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{ NSLog(@"%d", result); // 在面向對象程序開發中,有一個原則,誰申請,誰釋放! // *** 此方法也可以正常工作,因為系統會將關閉消息發送給self// [controller dismissViewControllerAnimated:YES completion:nil]; // 應該用這個!!! [self dismissViewControllerAnimated:YES completion:nil];}
- (void)sendmail{ // 1. 先判斷能否發送郵件 if (![MFMailComposeViewController canSendMail]) { // 提示用戶設置郵箱 return; } // 2. 實例化郵件控制器,準備發送郵件 MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init]; // 1) 主題 xxx的工作報告 [controller setSubject:@"我的工作報告"]; // 2) 收件人 [controller setToRecipients:@[@"4800607@Gmail.com"]]; // 3) cc 抄送 // 4) bcc 密送(偷偷地告訴,打個小報告) // 5) 正文 [controller setMessageBody:@"這是我的<font color=/"blue/">工作報告</font>,請審閱!<BR />P.S. 我的頭像牛X嗎?" isHTML:YES]; // 6) 附件 UIImage *image = [UIImage imageNamed:@"頭像1.png"]; NSData *imageData = UIImagePNGRepresentation(image); // 1> 附件的二進制數據 // 2> MIMEType 使用什么應用程序打開附件 // 3> 收件人接收時看到的文件名稱 // 可以添加多個附件 [controller addAttachmentData:imageData mimeType:@"image/png" fileName:@"頭像.png"]; // 7) 設置代理 [controller setMailComposeDelegate:self]; // 顯示控制器 [self presentViewController:controller animated:YES completion:nil];}
同樣要記得發完郵件記得調用代理方法關閉窗口
#pragma mark - 郵件代理方法/** MFMailComposeResultCancelled, 取消 MFMailComposeResultSaved, 保存郵件 MFMailComposeResultSent, 已經發送 MFMailComposeResultFailed 發送失敗 */- (void)mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error{ // 根據不同狀態提示用戶 NSLog(@"%d", result); [self dismissViewControllerAnimated:YES completion:nil];}
打電話有三種方式可以實現,優缺點也各不同
1 - (void)tel12 {3 // 直接撥號,撥號完成后會停留在通話記錄中4 NSURL *url = [NSURL URLWithString:@"tel://10010"];5 6 [[UIApplication sharedApplication] openURL:url];7 }
- (void)tel2{ // 但是:telprompt協議屬于蘋果的私有協議,一旦程序中使用了此協議,程序無法上架 // 針對越獄的機器開發的系統,可以使用此協議 NSURL *url = [NSURL URLWithString:@"telprompt://10010"]; [[UIApplication sharedApplication] openURL:url];}
一般都是用這種,解決了不越獄的問題。
- (void)tel3{ // 提示:不要將webView添加到self.view,如果添加會遮擋原有的視圖 // 懶加載 if (_webView == nil) { _webView = [[UIWebView alloc] init]; } NSLog(@"%p", _webView); // _webView = [[UIWebView alloc] initWithFrame:self.view.bounds];// [self.view addSubview:_webView]; NSURL *url = [NSURL URLWithString:@"tel://10010"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [_webView loadRequest:request];}
作者: 清澈Saup
出處: http://m.survivalescaperooms.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
新聞熱點
疑難解答