iOS查看手机通讯录
查看iphone的手机通讯录的话,需要用到一个库AddressBook。
可以使用里面的方法调用我们自己的通许录
-(void) getPhoneContacts{
ABAddressBookRef addressBook = nil;
if([[UIDevice currentDevice].systemVersion doubleValue] >= 6.0)
{
addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else
{
addressBook = ABAddressBookCreate();
}
NSArray *temPeoples = (__bridge NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
for(id temPerson in temPeoples)
{
NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithCapacity:2];
NSMutableArray *phoneArray = [[NSMutableArray alloc] initWithCapacity:3];
NSString *tmpFirstName = (__bridge NSString *) ABRecordCopyValue((__bridge ABRecordRef)(temPerson), kABPersonFirstNameProperty);
NSString *tmpLastName = (__bridge NSString *) ABRecordCopyValue((__bridge ABRecordRef)(temPerson), kABPersonLastNameProperty);
[dic setValue:[NSString stringWithFormat:@"%@ %@", tmpFirstName, tmpLastName] forKey:@"name"];
ABMultiValueRef phone = ABRecordCopyValue((__bridge ABRecordRef)(temPerson), kABPersonPhoneProperty);
for(int k = 0; k < ABMultiValueGetCount(phone); k++)
{
NSString *personPhone = (__bridge NSString *) ABMultiValueCopyValueAtIndex(phone, k);
[phoneArray addObject:personPhone];
}
[dic setValue:phoneArray forKey:@"phone"];
[resultArray addObject:dic];
}
}
ABAddressBookCreate
和
ABAddressBookCreateWithOptions,ABAddressBookRequestAccessWithCompletion
是不同版本所使用的方法
ABAddressBookCreate适用于6.0以上的,另外的则使用雨6.0以后的,
之后调用ABAddressBookCopyArrayOfAllPeople,获取通讯录的内容。
代码如下:
PhoneContactsViewController.m
//
// PhoneContactsViewController.m
// PhoneContacts
//
// Created by david on 13-9-25.
// Copyright (c) 2013年 WalkerFree. All rights reserved.
//
#import "PhoneContactsViewController.h"
#import <AddressBook/AddressBook.h>
@interface PhoneContactsViewController ()
@end
@implementation PhoneContactsViewController
@synthesize resultArray;
@synthesize tableView;
- (void)viewDidLoad
{
[super viewDidLoad];
// Dispose of any resources that can be recreated.
self.navigationItem.title = @"查看手机通讯录";
resultArray = [[NSMutableArray alloc] initWithCapacity:100];
[self getPhoneContacts];
//left的button
UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeCustom];
[btnBack setFrame:CGRectMake(0, 0, 25, 26)];
[btnBack setTitle:@"返回" forState:UIControlStateNormal];
[btnBack addTarget:self action:@selector(pressBtnBack) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftBtn = [[UIBarButtonItem alloc] initWithCustomView:btnBack];
self.navigationItem.leftBarButtonItem = leftBtn;
//表表格处理
tableView = [[UITableView alloc] initWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height - 44.0) style:UITableViewStylePlain];
[tableView setDelegate:self];
[tableView setDataSource:self];
[tableView setShowsHorizontalScrollIndicator:NO];
[tableView setShowsVerticalScrollIndicator:NO];
[self.view addSubview:tableView];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(void) pressBtnBack{
[self.navigationController popViewControllerAnimated:YES];
}
-(void) getPhoneContacts{
ABAddressBookRef addressBook = nil;
if([[UIDevice currentDevice].systemVersion doubleValue] >= 6.0)
{
addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
dispatch_semaphore_signal(sema);
});
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
else
{
addressBook = ABAddressBookCreate();
}
NSArray *temPeoples = (__bridge NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
for(id temPerson in temPeoples)
{
NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithCapacity:2];
NSMutableArray *phoneArray = [[NSMutableArray alloc] initWithCapacity:3];
NSString *tmpFirstName = (__bridge NSString *) ABRecordCopyValue((__bridge ABRecordRef)(temPerson), kABPersonFirstNameProperty);
NSString *tmpLastName = (__bridge NSString *) ABRecordCopyValue((__bridge ABRecordRef)(temPerson), kABPersonLastNameProperty);
[dic setValue:[NSString stringWithFormat:@"%@ %@", tmpFirstName, tmpLastName] forKey:@"name"];
ABMultiValueRef phone = ABRecordCopyValue((__bridge ABRecordRef)(temPerson), kABPersonPhoneProperty);
for(int k = 0; k < ABMultiValueGetCount(phone); k++)
{
NSString *personPhone = (__bridge NSString *) ABMultiValueCopyValueAtIndex(phone, k);
[phoneArray addObject:personPhone];
}
[dic setValue:phoneArray forKey:@"phone"];
[resultArray addObject:dic];
}
}
-(NSInteger) tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 1;
}
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [resultArray count];
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:cellIdentifier];
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];
}
NSDictionary *dic = [resultArray objectAtIndex:indexPath.row];
NSString *strName = [dic valueForKey:@"name"];
strName = [strName stringByReplacingOccurrencesOfString:@"(null)" withString:@""];
cell.textLabel.text = strName;
cell.detailTextLabel.text = @"邀请";
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSelector:@selector(deleteSelectedCell) withObject:nil afterDelay:0.1];
NSDictionary *dic = [resultArray objectAtIndex:indexPath.row];
NSArray *numArray = [dic valueForKey:@"phone"];
UIActionSheet *sheet = [[UIActionSheet alloc] init];
[sheet setTitle:@"请选择号码"];
for(NSString *number in numArray)
{
[sheet addButtonWithTitle:number];
}
[sheet addButtonWithTitle:@"取消"];
[sheet setDelegate:self];
[sheet setCancelButtonIndex:[numArray count]];
[sheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent];
[sheet showInView:self.view];
}
-(void) deleteSelectedCell
{
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:YES];
}
-(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *string = [actionSheet buttonTitleAtIndex:buttonIndex];
if([string isEqualToString:@"取消"])
{
return;
}
[self showMSMViewByNumber:string];
}
-(void) showMSMViewByNumber:(NSString *)string
{
if([MFMessageComposeViewController canSendText]){
[self displaySMSComposeSheet:string];
}else{
NSLog(@"Device not configured to send SMS.");
}
}
-(void) displaySMSComposeSheet:(NSString *)string
{
MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
picker.messageComposeDelegate = self;
picker.body = @"老婆我爱你";
picker.recipients = [NSArray arrayWithObjects:string, nil];
[self presentModalViewController:picker animated:YES];
}
-(void) messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
{
switch (result) {
case MessageComposeResultSent:
NSLog(@"信息发送成功!");
break;
case MessageComposeResultFailed:
NSLog(@"信息发送失败!");
break;
default:
break;
}
[self dismissModalViewControllerAnimated:YES];
}
@end
PhoneContactsViewController.h
//
// PhoneContactsViewController.h
// PhoneContacts
//
// Created by david on 13-9-25.
// Copyright (c) 2013年 WalkerFree. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <MessageUI/MessageUI.h>
@interface PhoneContactsViewController : UIViewController<UITableViewDataSource, UITableViewDelegate, UIActionSheetDelegate, MFMessageComposeViewControllerDelegate>
@property (strong, nonatomic) NSMutableArray *resultArray;
@property (strong, nonatomic) UITableView *tableView;
@end
别忘记引入文件:MessageUI和AddressBook
版权声明
由 davidzhang创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 博客( https://www.gowhich.com ),版权所有,侵权必究。
本文永久链接: https://www.gowhich.com/blog/388
版权声明
由 davidzhang创作并维护的 Gowhich博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。
本文首发于 Gowhich博客( https://www.gowhich.com ),版权所有,侵权必究。
本文永久链接: https://www.gowhich.com/blog/388