系統支持的 URL scheme 包括:mailto://、tel://、sms://、 maps://web
NSURL *URL = [NSURL URLWithString:@"http://nshipster.com"]; [[UIApplication sharedApplication] openURL:URL];
- (void)tel1 { // 直接撥號,撥號完成後會停留在通話記錄中 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplication sharedApplication] openURL:url]; }
telprompt協議屬於蘋果的私有協議,一旦程序中使用了此協議,程序沒法上架網絡
針對越獄的機器開發的系統,能夠使用此協議框架
- (void)tel2 { NSURL *url = [NSURL URLWithString:@"telprompt://10010"]; [[UIApplication sharedApplication] openURL:url]; }
若是須要返回APP,通常都是用這種,解決了不越獄的問題ui
- (void)tel3 { // 提示:不要將webView添加到self.view,若是添加會遮擋原有的視圖 // 懶加載 if (_webView == nil) { _webView = [[UIWebView alloc] init]; } // _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]; }
①不能指定短信內容url
②發送完短信後,會留在IMessage界面代理
NSURL *url = [NSURL URLWithString:@"sms://10010"]; [[UIApplication sharedApplication] openURL:url];
①能夠返回APPcode
②支持多人發送(羣發)對象
③能夠自定義消息,消息支持HTML格式的ip
並且若是在蘋果系統中,若是彼此的手機都是iOS設備,而且開通了iMessage功能,彼此之間的短信是走網絡通道,而不走運營商的通道!ci
- (void)msg { // 判斷用戶設備可否發送短信 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 { // 在面向對象程序開發中,有一個原則,誰申請,誰釋放! // *** 此方法也能夠正常工做,由於系統會將關閉消息發送給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) 收件人 // 3) cc 抄送:- (void)setCcRecipients:(NSArray<NSString *> *)ccRecipients // 4) bcc 密送:- (void)setBccRecipients:(NSArray<NSString *> *)bccRecipients [controller setToRecipients:@[@"4800607@gmail.com"]]; // 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 { [self dismissViewControllerAnimated:YES completion:nil]; }
UIImage *image = ...; id completionTarget = self; SEL completionSelector = @selector(didWriteToSavedPhotosAlbum); void *contextInfo = NULL; UIImageWriteToSavedPhotosAlbum(image, completionTarget, completionSelector, contextInfo);
@import SafariServices; NSURL *URL = [NSURL URLWithString:@"http://nshipster.com/uiactivityviewcontroller"]; [[SSReadingList defaultReadingList] addReadingListItemWithURL:URL title:@"NSHipster" previewText:@"..." error:nil];