养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

iOS开发获取通讯录的联系人以及发短信给联系人

时间:2024-09-28 13:22:42

iOS软件开发中难免有获取通讯录的联系人以及发短信给联系人的需求。在此简单的分享下

工具/原料

MacOSX操作系统

Xcode编译器

方法/步骤

1、创建工程项目和视图控制器创建一个empty(空的)工程项目,新建一个UIVie嘛术铹砾wController;选中工程,右键-New惺绅寨瞀File…选择“CocoaTouchClass”-Next,给个合理的名称LBAddressBookVC,再Next完成;在AppDelegate.m文件包含#import"LBAddressBookVC.h";初始化创建LBAddressBookVC的视图控制器,并用导航栏控制器包含。将之设置为根视图控制器。

iOS开发获取通讯录的联系人以及发短信给联系人

2、导入必须的库MessageUI.framework、AddressBook.framework、AddressBookUI.framework

3、.h文件#import<UIKit/UIKit.h>@interfaceLBAddressBookVC:UIViewController<UITableViewDelegate,UITableViewDataSource>@property(nonatomic,copy)NSMutableArray*personArray;@end

4、.m文件#import"LBAddressBookVC.h"#impor隋茚粟胫t<AddressBook/Addr髫潋啜缅essBook.h>#import<AddressBookUI/AddressBookUI.h>#import<MessageUI/MessageUI.h>#definejekPrompt@"提示"#definejekAddressBookMessage@"来‘’找我吧"//发短信中的内容@interfaceLBAddressBookVC(){NSIntegersectionNumber;NSIntegerrecordID;NSString*name;NSString*email;NSString*tel;NSMutableArray*addressBookTemp;}@property(nonatomic,assign)ABAddressBookRefaddressBookRef;@propertyNSIntegersectionNumber;@propertyNSIntegerrecordID;@property(nonatomic,retain)NSString*name;@property(nonatomic,retain)NSString*email;@property(nonatomic,retain)NSString*tel;@end@implementationLBAddressBookVC@synthesizename,email,tel,recordID,sectionNumber,personArray;-(void)viewDidLoad{[superviewDidLoad];self.title=@"通讯录中邀请";personArray=[NSMutableArrayarray];UITableView*tabview=[[UITableViewalloc]initWithFrame:CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height)style:UITableViewStylePlain];tabview.delegate=self;tabview.dataSource=self;[self.viewaddSubview:tabview];[selfgetBook];}#pragmamark-获取手机中的通讯录以及解析联系人-(NSMutableArray*)getBook{if(personArray==nil){personArray=[NSMutableArrayarray];}//新建一个通讯录类ABAddressBookRefaddressBooks=nil;if([[UIDevicecurrentDevice].systemVersionfloatValue]>=6.0){addressBooks=ABAddressBookCreateWithOptions(NULL,NULL);//获取通讯录权限dispatch_semaphore_tsema=dispatch_semaphore_create(0);ABAddressBookRequestAccessWithCompletion(addressBooks,^(boolgranted,CFErrorReferror){dispatch_semaphore_signal(sema);});dispatch_semaphore_wait(sema,DISPATCH_TIME_FOREVER);}else{addressBooks=ABAddressBookCreate();}//获取通讯录中的所有人CFArrayRefallPeople=ABAddressBookCopyArrayOfAllPeople(addressBooks);//通讯录中人数CFIndexnPeople=ABAddressBookGetPersonCount(addressBooks);//循环,获取每个人的个人信息for(NSIntegeri=0;i<nPeople;i++){//新建一个addressBookmodel类LBAddressBookVC*addressBook=[[LBAddressBookVCalloc]init];//获取个人ABRecordRefperson=CFArrayGetValueAtIndex(allPeople,i);//获取个人名字CFTypeRefabName=ABRecordCopyValue(person,kABPersonFirstNameProperty);CFTypeRefabLastName=ABRecordCopyValue(person,kABPersonLastNameProperty);CFStringRefabFullName=ABRecordCopyCompositeName(person);NSString*nameString=(__bridgeNSString*)abName;NSString*lastNameString=(__bridgeNSString*)abLastName;if((__bridgeid)abFullName!=nil){nameString=(__bridgeNSString*)abFullName;}else{if((__bridgeid)abLastName!=nil){nameString=[NSStringstringWithFormat:@"%@%@",nameString,lastNameString];}}addressBook.name=nameString;addressBook.recordID=(int)ABRecordGetRecordID(person);;ABPropertyIDmultiProperties[]={kABPersonPhoneProperty,kABPersonEmailProperty};NSIntegermultiPropertiesTotal=sizeof(multiProperties)/sizeof(ABPropertyID);for(NSIntegerj=0;j<multiPropertiesTotal;j++){ABPropertyIDproperty=multiProperties[j];ABMultiValueRefvaluesRef=ABRecordCopyValue(person,property);NSIntegervaluesCount=0;if(valuesRef!=nil)valuesCount=ABMultiValueGetCount(valuesRef);if(valuesCount==0){CFRelease(valuesRef);continue;}//获取电话号码和emailfor(NSIntegerk=0;k<valuesCount;k++){CFTypeRefvalue=ABMultiValueCopyValueAtIndex(valuesRef,k);switch(j){case0:{//PhonenumberaddressBook.tel=(__bridgeNSString*)value;break;}case1:{//EmailaddressBook.email=(__bridgeNSString*)value;break;}}CFRelease(value);}CFRelease(valuesRef);}//将个人信息添加到数组中,循环完成后addressBookTemp中包含所有联系人的信息[personArrayaddObject:addressBook];if(abName)CFRelease(abName);if(abLastName)CFRelease(abLastName);if(abFullName)CFRelease(abFullName);NSLog(@"---%@",personArray);}returnpersonArray;}#pragmamark-UITableViewDelegateandDatasourcefunctions-(NSInteger)numberOfSectionsInTableView:(UITableView*)tableView{return1;}-(NSInteger)tableView:(UITableView*)tableViewnumberOfRowsInSection:(NSInteger)section{returnpersonArray.count;}-(CGFloat)tableView:(UITableView*)tableViewheightForHeaderInSection:(NSInteger)section{return0.1;}-(CGFloat)tableView:(UITableView*)tableViewheightForRowAtIndexPath:(NSIndexPath*)indexPath{return52.5;}-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{NSString*cellIdentifier=@"ContactCell";UITableViewCell*cell=[tableViewdequeueReusableCellWithIdentifier:cellIdentifier];if(cell==nil){cell=[[UITableViewCellalloc]initWithStyle:UITableViewCellStyleSubtitlereuseIdentifier:cellIdentifier];}LBAddressBookVC*book=[personArrayobjectAtIndex:indexPath.row];cell.textLabel.text=book.name;cell.detailTextLabel.text=book.tel;returncell;}-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{[tableViewdeselectRowAtIndexPath:indexPathanimated:YES];LBAddressBookVC*book=[personArrayobjectAtIndex:indexPath.row];NSString*phoneNumber=[book.telstringByReplacingOccurrencesOfString:@"-"withString:@""];[selfsendSmsMessageWithPhoneNumber:phoneNumber];}#pragmamark-短信-(void)sendSmsMessageWithPhoneNumber:(NSString*)phoneNumber{if([MFMessageComposeViewControllercanSendText]){[selfdisplaySMSComposerSheetPhoneNumber:phoneNumber];}else{UIAlertView*msgbox=[[UIAlertViewalloc]initWithTitle:jekPromptmessage:@"该设备不支持发短信"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];[msgboxshow];}}-(void)displaySMSComposerSheetPhoneNumber:(NSString*)phoneNumber{MFMessageComposeViewController*picker=[[MFMessageComposeViewControlleralloc]init];picker.messageComposeDelegate=(id<MFMessageComposeViewControllerDelegate>)self;picker.recipients=[NSArrayarrayWithObject:phoneNumber];picker.body=[NSStringstringWithFormat:@"%@",jekAddressBookMessage];[selfpresentViewController:pickeranimated:YEScompletion:nil];}-(void)messageComposeViewController:(MFMessageComposeViewController*)controllerdidFinishWithResult:(MessageComposeResult)result{switch(result){caseMessageComposeResultCancelled:NSLog(@"Result:SMSsendingcanceled");break;caseMessageComposeResultSent:NSLog(@"Result:SMSsent");break;caseMessageComposeResultFailed:{UIAlertView*msgbox=[[UIAlertViewalloc]initWithTitle:jekPromptmessage:@"短信发送失败"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];[msgboxshow];}break;default:NSLog(@"Result:SMSnotsent");break;}[selfdismissViewControllerAnimated:YEScompletion:nil];}@end

iOS开发获取通讯录的联系人以及发短信给联系人

© 一点知识