iOS常用小功能
常用小功能
技术博客http://www.cnblogs.com/ChenYilong/
新浪微博http://weibo.com/luohanchenyilong
• 打电话
• 方法:NSURL *url = [NSURLURLWithString:@"tel://10010"];! [[UIApplication sharedApplication]openURL:url];!
• 优点:! - 简单!
• 缺点:!
- 电话打完后,不会自动回到原应用
NSURL *url = [NSURLURLWithString:@"telprompt:// 10010"];!
[[UIApplication sharedApplication]openURL:url];
• 优点:- 拨号前询问,拨号后返回
• 缺点:- 私有API,所以可能不会被审核通过 - 可以在开发越狱的应用中使用
• 方法:利用UIWebView来加载URL,电话结束后会返回到应用程序中
• 提示:不要将UIWebView添加到视图上,否则会挡住其他视图
if (_webView == nil) {!
_webView = [[UIWebView alloc] init];!
}! !
NSURL *url = [NSURLURLWithString:@"tel://10010"];! [_webView loadRequest:[NSURLRequestrequestWithURL:url]];
• 方法:NSURL *url = [NSURLURLWithString:@"sms://10010"];! [[UIApplication sharedApplication]openURL:url];!
• 优点:! - 简单!
• 缺点:!
- 不能指定短信内容,而且不能自动回到原应用
if (![MFMessageComposeViewControllercanSendText]) {! return;!
}! !
MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc]init];!
!
controller.recipients = @[@"10010",@"10086"];!
controller.body = @"拜个晚年,祝您晚年快乐!";!
controller.messageComposeDelegate = self;!
!
[self presentViewController:controlleranimated:YES completion:nil];!
!
提示:! iMessage还可以支持发送主题及附件!
/**!
MessageComposeResultCancelled, 取消! MessageComposeResultSent, 已发送! MessageComposeResultFailed 失败! */!
- (void)messageComposeViewController: (MFMessageComposeViewController *)controller didFinishWithResult: (MessageComposeResult)result!
{!
NSLog(@"%d", result);!
!
[self dismissViewControllerAnimated:YEScompletion:nil];!
}
NSURL *url = [NSURLURLWithString:@"mailto://110@qq.com"];!
[[UIApplication sharedApplication]openURL:url];!
• 优点:! - 简单!
• 缺点:!
- 邮件发送后,不会自动回到原应用- 如果没有配置邮箱,该方法不会有任何响应
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];! !
• 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记录中 获取到对应的记录,但是后续处理则需要根据记录的具体 类型加以区分
• 使用ABRecordCopyValue函数可以从ABRecordRef中获得联系人 的简单属性(例如:一个字符串)
个参数- 第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);!
}
// 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);!
• 添加联系人的步骤 1. 通过ABPersonCreate函数创建一个新的联系人(返回
ABRecordRef)
.2. 通过ABRecordSetValue函数设置联系人的属性
.3. 通过ABAddressBookAddRecord函数将联系人添加到通讯 录数据库中
.4. 通过ABAddressBookSave函数保存刚才所作的修改
• 可以通过ABAddressBookHasUnsavedChanges函数判断是
否有未保存的修改
• 当决定是否更改通讯录数据库后,你可以分别使用 AbAddressBookSave 或ABAddressBookRevert 方式来保存 或放弃更改
• 添加群组的步骤大体和添加联系人一致Ø 通过ABPersonCreate函数创建一个新的组(返回
ABRecordRef)
Ø 通过ABRecordSetValue函数设置组名
Ø 通过ABAddressBookAddRecord函数将组添加到通讯录数 据库中
Ø 通过ABAddressBookSave函数保存刚才所作的修改
• 想操作联系人的头像,有以下函数
• BPersonHasImageData
• 判断通讯录中的联系人是否有图片
• ABPersonCopyImageData
• 取得图片数据(假如有的话)
• ABPersonSetImageData
• 设置联系人的图片数据

iOS常用小功能的更多相关文章
- iOS 常用小功能 总结
常用小功能 iOS中的很多小功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等 打电话 方法一(不被采用): 拨号之前会弹框询问用户是否拨号,拨完后能自动回到原应用 NSUR ...
- iOS 网易彩票-6设置模块三(常用小功能)
该篇文章中,用到很多iOS开发过程中常用的小功能,当前只是将这些功能集成到网易彩票的设置中.iOS-常用小功能介绍,请参考我的另一篇文章: iOS 常用小功能 总结:http://www.cnblog ...
- android 常用小功能(第二版)
经历过一段岁月,转眼2013的半年都过去了,第二版整理好的小功能,答应大家发布的,直到今日,终于和大家相见了,第二版没有第一版多,大家也可以去参考第一版的内容,希望大家使用愉快! 目录: 1.获取当前 ...
- iOS 通信常用小功能
打电话 a.最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplicatio ...
- iOS之小功能模块--彩虹动画进度条学习和自主封装改进
前言: 首先展示一下这个iOS小示例的彩色进度条动画效果: 阅读本文先说说好处:对于基础不好的读者,可以直接阅读文末尾的"如何使用彩虹动画进度条"章节,然后将我封装好的这个功能模块 ...
- Redis学习——常用小功能
一.慢查询分析(查询日志:所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功 ...
- JavaScript 常用小功能
判断一个是否是隐藏状态 $(curid).is(":visible") 响应回车 $("#password").keydown(function (e) { ...
- IOS开发小功能2:二维码扫描界面的设计(横线上下移动)
效果图如上,实现的是一个二维码扫描界面. 下面我贴出线条上下移动的代码,至于二维码的代码是用的第三方库. 首先是整体的结构: 注意下面的库文件一个都不能少,否则会报错. TLTiltHighlight ...
- IOS开发小功能1:引导页的开发
效果图如上,实现的是一个页面引导页,最后跳到主页面,主页面是一个navigationController,但是导航栏给我隐藏了. 文件目录:自己定制的viewcontroller以及navigatio ...
随机推荐
- BaseServlet 继承 httpServlet
BaseServlet 核心 package cn.core; import java.io.IOException; import java.lang.reflect.Method; impor ...
- “人向猿进阶”之软件工程第三课----WORDCOUNT.EXE统计程序
---恢复内容开始--- WC项目要求 这个项目要求写一个命令行程序,模仿已有的wc.exe的功能,并加以扩充,给出某程序设计源语言文件的字符数.单词数和行数.给实现一个统计程序,它能正确统计程序文件 ...
- C语言入门:06.基本运算
一.算术运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1. 加法运算+ 除了能做加法运算,还能表示正号:+5.+90 2.减法运算- 除了能做减法运算,还能表示符号:-10.-29 3. ...
- Python [练习题] :字典扁平化
习题:将source字典扁平化,输出为 target 格式的字典.source = {'a': {'b': 1, 'c': 2}, 'd': {'e': 3, 'f': {'g': 4}}}targe ...
- Redis的核心Hystrix在Spring mvc的使用
核心Hystrix,Hystrix对于接口调用具有很好的保护,能在多服务依赖的分布式系统中,有效的提供应用的可用性,并且对失败应用进行熔断和恢复检查,让应用在复杂的环境中也能各种稳. http://t ...
- Python学习---------登陆系统代码实现
题目要求: 一.编写登陆入口 1.输入用户名密码 2.认证成功后显示欢迎的信息 3.输错三次后锁定 Readme: 1.本次实现了登陆系统,若锁定就输出为锁定用户(锁定信息保存在user_lock.t ...
- 51nod 1102 面积最大的矩形 (单调栈)
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1102 思路: 首先介绍下单调栈的功能:利用单调栈,可以找到从左/ ...
- 用Python建设企业认证和权限控制平台
目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...
- NOIP2018TG 初赛复习
Date: 20180911 TCP/IP OSI7面向对象的程序设计语言 1.不是自顶向下2.simula 67语言 第一个3.继承性.封装性.多态性NOIP支持的语言环境:对于c / c++ :D ...
- 超实用Image类
using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Runt ...