首页 > 其他 > 详细

iOS常用小功能

时间:2014-03-08 11:48:02      阅读:475      评论: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 FundationFundation之间的数据类型转换需要使用桥接 __bridge, __bridge_transfer或者__bridge_retained
包含CreateCopy字样函数创建的对象需要使用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 版权所有
打开技术之扣,分享程序人生!