系统支持的 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];