首页 > 其他 > 详细

iOS常用小功能

时间:2014-03-08 11:48:02      阅读:483      评论:0      收藏:0      [点我收藏+]

常用小功能


技术博客http://www.cnblogs.com/ChenYilong/ 
新浪微博http://weibo.com/luohanchenyilong 

bubuko.com,布布扣

常用小功能 


常用小功能 
? 打电话
? 发短信
? 发邮件
? 打开网址
? 通讯录 

bubuko.com,布布扣


打电话(1)--URL 
? 方法:NSURL *url = [NSURLURLWithString:@"tel://10010"];! [[UIApplication sharedApplication]openURL:url];!
? 优点:! - 简单!
? 缺点:!
- 电话打完后,不会自动回到原应用 

bubuko.com,布布扣


打电话(2)--telprompt


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

bubuko.com,布布扣


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

bubuko.com,布布扣



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

bubuko.com,布布扣


发短信(2)--MessageUI框架 
if (![MFMessageComposeViewControllercanSendText]) {! return;!
}! !
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc]init];!
!
controller.recipients = @[@"10010",@"10086"];!
controller.body = @"拜个晚年,祝您晚年快乐!";!
controller.messageComposeDelegate = self;!
!
[self presentViewController:controlleranimated:YES completion:nil];!
!
提示:! iMessage还可以支持发送主题及附件! 

bubuko.com,布布扣


发短信(2)--关闭视图控制器 
/**!
MessageComposeResultCancelled,
 取消! MessageComposeResultSent, 已发送! MessageComposeResultFailed 失败! */!
- (void)messageComposeViewController: (MFMessageComposeViewController *)controller didFinishWithResult: (MessageComposeResult)result!
{!
NSLog(@"%d", result);!
!
[
self dismissViewControllerAnimated:YEScompletion:nil];!
} 

bubuko.com,布布扣


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

bubuko.com,布布扣


发邮件(2)--MessageUI框架 
if (![MFMailComposeViewController canSendMail]) {! NSLog(@"还没有配置邮件账户,无法发送邮件。");!return;!
}!
MFMailComposeViewController *controller =
[[MFMailComposeViewController alloc] init];! !
[controller setMailComposeDelegate:self];! !
[controller setSubject:@"工作报告"];!
[controllersetToRecipients:@[@"fan.liu@me.com"]];!
[controllersetCcRecipients:@[@"manager@qq.com"]];!
[controllersetBccRecipients:@[@"boss@qq.com"]];!
!
[controller setMessageBody:@"

项目进度还算OK,领导请放心,保证不辜负您的期望!

" isHTML:YES];!
[controller addAttachmentData:datamimeType:@"image/png" fileName:@"头 像.png"];!
[self presentViewController:controlleranimated:YES completion:nil];! !


bubuko.com,布布扣


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

bubuko.com,布布扣


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

bubuko.com,布布扣


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

bubuko.com,布布扣


查询授权状态 
? ABAddressBookGetAuthorizationStatus函数可以查询对通讯录的访问 权限
?? kABAuthorizationStatusNotDetermined
? 用户还没有决定是否授权你的程序进行访问 

?? kABAuthorizationStatusRestricted
? iOS设备上的家长控制或其它一些许可配置阻止程序与通讯录数据库 进行交互 
?? kABAuthorizationStatusDenied
? 用户明确的拒绝了你的程序对通讯录的访问 
?? kABAuthorizationStatusAuthorized
? 用户已经授权给你的程序对通讯录进行访问 

bubuko.com,布布扣


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

bubuko.com,布布扣



联系人属性定义 
? 所有的属性常量值都定义在了ABPerson.h头文件中 
? 联系人属性包括以下类型: - 简单属性:姓、名等 
- 多重属性:电话号码、电子邮件等 - 组合属性:地址等 
? 注意:使用ABRecordCopyValue可以从一条Person记录中 获取到对应的记录,但是后续处理则需要根据记录的具体 类型加以区分 

bubuko.com,布布扣


简单属性 

? 一个联系人就是一个ABRecordRef,每个联系人都有自己的属 性,比如名字、电话、邮件等 
? 使用ABRecordCopyValue函数可以从ABRecordRef中获得联系人 的简单属性(例如:一个字符串) 
? ABRecordCopyValue函数接收2个参数- 第1个参数是ABRecordRef实例- 第2个参数是属性关键字,定义在ABPerson.h中 
? ABPersonCopyLocalizedPropertyName函数可以根据指定的关键 字获取对应的标签文本 

bubuko.com,布布扣


获得所有的联系人数据 
// 获取所有联系人记录 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);!
} 

bubuko.com,布布扣


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);! !
结论:转换看起来很美~~~ 

bubuko.com,布布扣


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


bubuko.com,布布扣


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

bubuko.com,布布扣


添加联系人的步骤 
? 添加联系人的步骤 1. 通过ABPersonCreate函数创建一个新的联系人(返回
ABRecordRef) 
.2. 通过ABRecordSetValue函数设置联系人的属性 
.3. 通过ABAddressBookAddRecord函数将联系人添加到通讯 录数据库中 
.4. 通过ABAddressBookSave函数保存刚才所作的修改 
? 可以通过ABAddressBookHasUnsavedChanges函数判断是
否有未保存的修改 
? 当决定是否更改通讯录数据库后,你可以分别使用 AbAddressBookSave 或ABAddressBookRevert 方式来保存 或放弃更改 

bubuko.com,布布扣


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

bubuko.com,布布扣


操作联系人的头像 
? 想操作联系人的头像,有以下函数 
? BPersonHasImageData 
? 判断通讯录中的联系人是否有图片 
? ABPersonCopyImageData 
? 取得图片数据(假如有的话) 
? ABPersonSetImageData 
? 设置联系人的图片数据 
bubuko.com,布布扣
? chenyilong. Powered by Postach.io

 

 

iOS常用小功能,布布扣,bubuko.com

iOS常用小功能

原文:http://www.cnblogs.com/ChenYilong/p/3587322.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!