文档章节

IOS小功能

哥特复心
 哥特复心
发布于 2014/02/28 20:31
字数 1724
阅读 1164
收藏 7
  1. 打电话
  2. 发短信
  3. 发邮件
  4. 打开网址
  5. 通讯录

打电话 方法一: NSURL *url = [NSURL URLWithString:@"tel://10086"]; [[UIApplication sharedApplication] openURL:url]; 优点:简单 缺点:电话打完后,不会自动回到原应用

方法二: NSURL *url = [NSURL URLWithString:@"telprompt://10086"]; [[UIApplication sharedApplication] openURL:url]; 优点:拨号前询问,拨号后返回 缺点:私有API,所以可能不会被审核通过 ,可以在开发越狱的应用中使用

方法三:利用UIWebView来加载URL,电话结束后会返回到应用程序中 提示:不要将UIWebView添加到视图上,否则会挡住其他视图 if (_webView == nil) { _webView = [[UIWebView alloc] init];//这里不能添加到view哦!! } NSURL *url = [NSURL URLWithString:@"tel://10010"]; [_webView loadRequest:[NSURLRequest requestWithURL:url]];

发短信 方法一:URL NSURL *url = [NSURL URLWithString:@"sms://10010"]; [[UIApplication sharedApplication] openURL:url]; 优点:简单 缺点:不能指定短信内容,而且不能自动回到原应用

方法二:MessageUI if (![MFMessageComposeViewController canSendText]) { return; } MFMessageComposeViewController controller = [[MFMessageComposeViewController alloc] init]; controller.recipients = @[@"10010", @"10086"]; controller.body = @"拜个晚年,祝您晚年快乐!"; controller.messageComposeDelegate = self; [self presentViewController:controller animated:YES completion:nil]; 提示:iMessage还可以支持发送主题及附件 /* MessageComposeResultCancelled, 取消 MessageComposeResultSent, 已发送 MessageComposeResultFailed 失败 */

  • (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result { //NSLog(@"%d", result); [self dismissViewControllerAnimated:YES completion:nil]; }

发邮件 方法一:url NSURL *url = [NSURL URLWithString:@"mailto://110@qq.com"]; [[UIApplication sharedApplication] openURL:url]; 优点:简单 缺点:邮件发送后,不会自动回到原应用 如果没有配置邮箱,该方法不会有任何响应

方法二:MessageUI框架 if (![MFMailComposeViewController canSendMail]) { NSLog(@"还没有配置邮件账户,无法发送邮件。"); return; } MFMailComposeViewController *controller = [[MFMailComposeViewController alloc] init];

[controller setMailComposeDelegate:self];

[controller setSubject:@"工作报告"]; [controller setToRecipients:@[@"fan.liu@me.com"]]; [controller setCcRecipients:@[@"manager@qq.com"]]; [controller setBccRecipients:@[@"boss@qq.com"]];

[controller setMessageBody:@"<h3>项目进度还算<strong><font red="red">OK</font><strong>,领导请放心,保证不辜负您的期望!</h3>" isHTML:YES]; [controller addAttachmentData:data mimeType:@"image/png" fileName:@"头像.png"]; [self presentViewController:controller animated:YES completion:nil];

MIMEType是由服务器通知客户端该资源应该由哪一个应用程序打开的类型 要获取网络资源的MIMEType,要使用HEAD访问请求

通讯录 要访问通讯录,需要使用AddressBook.framework框架 在访问用户通讯录时,要注意保护用户的隐私 从iOS6开始,要访问通讯录,需要得到用户的授权,因此在使用之前,需要检查用户是否已经授权

AddressBook.framework该框架为底层通讯录的数据库提供了一套C语言的框架,属于Core Fundation框架范畴 Core Fundation与Fundation之间的数据类型转换需要使用桥接 __bridge,__bridge_transfer或者__bridge_retained 包含Create、Copy字样函数创建的对象需要使用CFRelease函数释放

查询授权状态 ABAddressBookGetAuthorizationStatus 函数可以查询对通讯录的访问权限 kABAuthorizationStatusNotDetermined 用户还没有决定是否授权你的程序进行访问 kABAuthorizationStatusRestricted iOS设备上的家长控制或其它一些许可配置阻止程序与通讯录数据库进行交互 kABAuthorizationStatusDenied 用户明确的拒绝了你的程序对通讯录的访问 kABAuthorizationStatusAuthorized 用户已经授权给你的程序对通讯录进行访问

申请访问通讯录 // 实例化通讯录对象 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { if (granted) { NSLog(@"授权成功!"); } else { NSLog(@"授权失败!"); } }); CFRelease(addressBook); break; 提示:申请通讯录访问授权的代码,通常放在AppDelegate中

联系人属性定义 所有的属性常量值都定义在了ABPerson.h头文件中 联系人属性包括以下类型: 简单属性:姓、名等 多重属性:电话号码、电子邮件等 组合属性:地址等 注意:使用ABRecordCopyValue可以从一条Person记录中获取到对应的记录,但是后续处理则需要根据记录的具体类型加以区分 简单熟悉 一个联系人就是一个ABRecordRef,每个联系人都有自己的属性,比如名字、电话、邮件等 使用ABRecordCopyValue函数可以从ABRecordRef中获得联系人的简单属性(例如:一个字符串) ABRecordCopyValue函数接收2个参数 第1个参数是ABRecordRef实例 第2个参数是属性关键字,定义在ABPerson.h中 ABPersonCopyLocalizedPropertyName函数可以根据指定的关键字获取对应的标签文本

获得所有的练习人数据 // 获取所有联系人记录 CFArrayRef array = ABAddressBookCopyArrayOfAllPeople(addressBook); NSInteger count = CFArrayGetCount(array); for (NSInteger i = 0; i < count; ++i) { // 取出一条记录 ABRecordRef person = CFArrayGetValueAtIndex(array, i); // 取出个人记录中的详细信息 // 名 CFStringRef firstNameLabel = ABPersonCopyLocalizedPropertyName(kABPersonFirstNameProperty); CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty); CFStringRef lastNameLabel = ABPersonCopyLocalizedPropertyName(kABPersonLastNameProperty); // 姓 CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty); NSLog(@"%@ %@ - %@ %@", lastNameLabel, lastName, firstNameLabel, firstName); }

CoreFoundation 与 Foundation之间的桥接 / 1. 获取通讯录引用 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, nil); // 2. 获取所有联系人记录 NSArray *array = (__bridge NSArray *)(ABAddressBookCopyArrayOfAllPeople(addressBook)); for (NSInteger i = 0; i < array.count; i++) { // 取出一条记录 ABRecordRef person = (__bridge ABRecordRef)(array[i]); // 取出个人记录中的详细信息 NSString *firstNameLabel = (__bridge NSString *)(ABPersonCopyLocalizedPropertyName(kABPersonFirstNameProperty)); NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty)); NSString *lastNameLabel = (__bridge NSString *)(ABPersonCopyLocalizedPropertyName(kABPersonLastNameProperty)); NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty)); NSLog(@"%@ %@ - %@ %@", lastNameLabel, lastName, firstNameLabel, firstName); } CFRelease(addressBook); 结论:转换看起来很美~~~

多重属性 联系人的有些属性值就没这么简单,一个属性可能会包含多个值 比如邮箱,分为工作邮箱、住宅邮箱、其他邮箱等 比如电话,分为工作电话、住宅电话、其他电话等 如果是复杂属性,那么ABRecordCopyValue函数返回的就是ABMultiValueRef类型的数据,例如邮箱或者电话 // 取电话号码 ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); // 取记录数量 NSInteger phoneCount = ABMultiValueGetCount(phones); // 遍历所有的电话号码 for (NSInteger i = 0; i < phoneCount; i++) { …

获取复杂属性的方法 // 电话标签 CFStringRef phoneLabel = ABMultiValueCopyLabelAtIndex(phones, i); // 本地化电话标签 CFStringRef phoneLocalLabel = ABAddressBookCopyLocalizedLabel(phoneLabel); // 电话号码 CFStringRef phoneNumber = ABMultiValueCopyValueAtIndex(phones, i);

添加联系人的步骤 添加联系人的步骤 通过ABPersonCreate函数创建一个新的联系人(返回ABRecordRef) 通过ABRecordSetValue函数设置联系人的属性 通过ABAddressBookAddRecord函数将联系人添加到通讯录数据库中 通过ABAddressBookSave函数保存刚才所作的修改

可以通过ABAddressBookHasUnsavedChanges函数判断是否有未保存的修改 当决定是否更改通讯录数据库后,你可以分别使用 AbAddressBookSave 或 ABAddressBookRevert 方式来保存或放弃更改

添加群组的步骤 添加群组的步骤大体和添加联系人一致 通过ABPersonCreate函数创建一个新的组(返回ABRecordRef) 通过ABRecordSetValue函数设置组名 通过ABAddressBookAddRecord函数将组添加到通讯录数据库中 通过ABAddressBookSave函数保存刚才所作的修改

操作联系人的头像 想操作联系人的头像,有以下函数 BPersonHasImageData 判断通讯录中的联系人是否有图片

ABPersonCopyImageData 取得图片数据(假如有的话)

ABPersonSetImageData 设置联系人的图片数据

© 著作权归作者所有

上一篇: ARC 之内存转换
下一篇: MapKit和CoreLocation
哥特复心
粉丝 109
博文 68
码字总数 40593
作品 0
长沙
高级程序员
私信 提问
苹果发布 iOS 9.2 正式版:多项功能增强、改进

除了发布 OS X 10.11.2 和 tvOS 9.1 正式版外,苹果今天还发布了 iOS 9.2 正式版。iOS 9.2 是自 iOS 9 在今年9月发布之后的第二次重大版本更新。iOS 9.2 测试开始于10月底,开发者和公测用户...

oschina
2015/12/09
3.8K
22
苹果iOS的八年:如何一步步爬到了这么高

电脑需要操作系统,手机也需要,2007 年,苹果带着旗下第一款智能手机 iPhone 和第一款操作系统亮相,从而奠定了改变世界的基础。8 年时间以来,iPhone 一直在不停的进化、演变,iOS 操作系统...

oschina
2015/09/08
4K
22
苹果 iOS 10 更新消息汇总,iPhone 4s 可能用不了

自从iOS 7放弃沿用数代的拟物化界面,开启全新的扁平化系统以来,iOS每一年都在前作的基础上进行完善,使iOS更加的好用、完美。去年6月,苹果发布了新一代操作系统iOS 9,并在9月份发布新款i...

oschina
2016/05/30
5.1K
29
iOS 8.2 beta 4 发布,新增与 Apple Watch 配对

苹果今天向开发者发布了 iOS 8.2 Beta 4测试版,距离第三个测试版发布相隔1个月的时间。距离 iOS 8.2 第一个测试版相隔两个月的时间。今天发布的新测试版编译号为 12D5461b,开发者可以通过 ...

oschina
2015/01/13
1K
1
iOS 7 正式版发布:全新设计、全新功能

经过漫长的等待,全新设计的iOS 7终于发布了!用户可以通过iTunes或OTA升级至全新的iOS 7.0。iOS 7拥有全新设计的界面和功能。也是自iPhone发布后,苹果移动操作系统变化最大的一次改变。 iO...

oschina
2013/09/19
6.1K
24

没有更多内容

加载失败,请刷新页面

加载更多

将博客搬至CSDN

https://blog.csdn.net/qq_38157006

Marhal
25分钟前
1
0
unicode Java中求字符串长度length()和codePointCount()的区别

在计算字符串长度时,Java的两种方法length()和codePointCount()一度让我困惑,运行书上例子得到的长度值是相等的,那为什么要设定两个方法呢? 对于普通字符串,这两种方法得到的值是一样的...

泉天下
26分钟前
2
0
uin-app 一、学习理由

选择uni-app 理由 别人的理由 1. 5+ 有HTML5+和Native.js技术,HTML5+包含常用的跨平台的几百个API,能满足常规开发需求,而Native.js把40w原生api映 射成js对象,这样js可以直接调原生。HTM...

轻轻的往前走
27分钟前
1
0
方括号及其在命令行中的不同用法介绍

通配 方括号最简单的用法就是通配。你可能在知道“ Globbing”这个概念之前就已经通过通配来匹配内容了,列出具有相同特征的多个文件就是一个很常见的场景,例如列出所有 JPEG 文件: ls *.j...

Linux就该这么学
33分钟前
2
0
vecty 基础

gopherjs 是把 go 编译为 js 的工具。 vecty 是基于 gopherjs 的一种类似 React 的开发框架。 安装 gopherjs 和 vecty go get -u github.com/gopherjs/gopherjsgo get -u github.com/gopher......

electricface
34分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部