概述:当人们使用 peoplePicker 并点击姓名时,我试图获取电话号码和全名。然后,我想在文本字段上显示全名并将电话号码保存为字符串。使用 ph num 和名称,我打算将其用作唯一标识。我不想使用 ABRecord 的唯一 ID,因为有时我的联系人有重复项,尤其是当我将它与谷歌等同步时...
如果我没理解错的话,我需要使用这个委托(delegate)方法
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
使用上面的方法,我可以获得在文本字段上显示为 scuh 的全名
textField.text = ABRecordCopyCompositeName(person);
但是,我不知道如何获取 ph 值。要获取 ph 值,我必须使用其他委托(delegate)方法:
- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker
shouldContinueAfterSelectingPerson:(ABRecordRef)person
property:(ABPropertyID)property
identifier:(ABMultiValueIdentifier)identifier
ABMultiValueRef phoneProperty = ABRecordCopyValue(person,property);
NSString *phone = (NSString *)ABMultiValueCopyValueAtIndex(phoneProperty,identifier);
但是,我不喜欢这样,因为当用户单击地址簿上的姓名时,它会显示带有 ph 号、电子邮件等的详细信息,并且用户必须单击 ph 号。我想要的是从第一个屏幕开始,用户点击名称,名称显示为文本字段,ph 值作为字符串保存在某处。
最佳答案
我使用一种方法将所有有电子邮件的人保存在一个数组中,然后在 TableView 中显示该数组:
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];
关于ios - 从 peoplePickerNavigationController 获取电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479052/