概述:当人们使用peoplePicker并点击名称时,我正在尝试获取电话号码和全名。然后,我想在文本字段中显示全名并将电话号码保存为字符串。使用ph num和name,我打算将其用作唯一标识。我不想使用ABRecord的唯一ID,因为有时我的联系人有重复,特别是当我与谷歌等同步时...
如果我理解正确,我需要使用此委托方法
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
使用上面的内容,我可以得到全文,在文本字段中显示为scuh
textField.text = ABRecordCopyCompositeName(person);
但是,我不知道如何获得电话号码。为了获得ph值,我必须使用其他委托方法:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,identifier);
但是,我不喜欢这个,因为当用户点击地址簿上的名字时,它会显示带有电话号码,电子邮件等的详细信息,用户必须点击电话号码。我想要的是从第一个屏幕,用户点击名称,名称显示为textField,ph值在某处保存为字符串。
答案 0 :(得分:1)
我使用一种方法将所有带电子邮件的人保存在一个数组中,然后在表格视图中显示该数组:
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
NSMutableArray *mArr = [[NSMutableArray alloc]init];
for( int i = 0 ; i < nPeople ; i++ )
{
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
NSString *preName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *postName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty);
int ecount = ABMultiValueGetCount(emails);
for (int i = 0; i < ecount; i++) {
NSMutableDictionary *dd = [[NSMutableDictionary alloc]init];
[dd setValue:[NSString stringWithFormat:@"%@ %@", preName, postName] forKey:@"name"];
NSString *emailID = (NSString *)ABMultiValueCopyValueAtIndex(emails, i);
[dd setValue:emailID forKey:@"mail"];
//NSLog(@"inside loop %@ %@ %@", preName, postName, emailID);
[emailID release];
[mArr addObject:dd];
[dd release];
}
}
emailArray = [[NSArray alloc]initWithArray:mArr];
[mArr release];
答案 1 :(得分:1)
如果您想获得第一封电子邮件和电话号码,请使用此代码。这适用于带有Xcode 4.2的iOS 5.0
- (BOOL)peoplePickerNavigationController:
(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
//NSLog(@"Went here 1 ...");
NSString *nameStr = (__bridge NSString *)ABRecordCopyCompositeName(person);
ABMultiValueRef emails = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonEmailProperty);
ABMultiValueRef phones = (ABMultiValueRef) ABRecordCopyValue(person, kABPersonPhoneProperty);
NSString *emailStr = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 0);
NSString *phoneStr = (__bridge NSString *)ABMultiValueCopyValueAtIndex(phones, 0);
//strip number from brakets
NSMutableString *tmpStr1 = [NSMutableString stringWithFormat:@"%@", phoneStr];
NSString *strippedStr1 = [tmpStr1 stringByReplacingOccurrencesOfString:@" " withString:@""];
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"()-"];
strippedStr1 = [[strippedStr1 componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"nameStr: %@ ... emailStr: %@ ... phoneStr: %@ ...", nameStr, emailStr,strippedStr1);
//dismiss
[self dismissModalViewControllerAnimated:YES];
return NO;
}