ios – 如何告诉ABPeoplePickerNavigationController仅列出具有电子邮件地址的联系人?

前端之家收集整理的这篇文章主要介绍了ios – 如何告诉ABPeoplePickerNavigationController仅列出具有电子邮件地址的联系人?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我希望我的用户通过从地址簿中选择联系人的电子邮件来填写电子邮件字段.我不希望他们滚动所有未设置电子邮件的联系人,所以我想过滤那些有电子邮件地址的联系人.

这是我到目前为止编写的代码.我可以找出谁有一个电子邮件地址,谁没有,但我不能告诉ABPeoplePickerNavigationController只列出正确的联系人.是不可能实现这一点,我的意思是我必须使用表格视图实现我自己的联系人选择器类或这段代码有什么问题吗?

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *peopleList = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSLog(@"%ld people exist in the addressBook",ABAddressBookGetPersonCount(addressBook));
for (id peopleRecord in peopleList) {
    ABMultiValueRef mv = ABRecordCopyValue((ABRecordRef)peopleRecord,kABPersonEmailProperty);
    CFIndex numberOfAddresses = ABMultiValueGetCount(mv);
    if(numberOfAddresses == 0) {
        CFErrorRef err;
        ABAddressBookRemoveRecord( addressBook,(ABRecordRef)peopleRecord,&err);
    }
}
[peopleList release];

NSLog(@"%ld people have an email",ABAddressBookGetPersonCount(addressBook));

ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
NSNumber* emailProp = [NSNumber numberWithInt:kABPersonEmailProperty];
[peoplePicker setAddressBook:addressBook];
peoplePicker.displayedProperties = [NSArray arrayWithObject:emailProp];
[peoplePicker setPeoplePickerDelegate:self];
[self presentModalViewController:peoplePicker animated:YES];

解决方法

我不相信有办法让iOS进行这种过滤.我也是在代码中做的.请注意,您需要查找各种电子邮件地址 – 您必须遍历您可以获得的字典.使用它是一个PITA肯定 – 我以前做过 – 你必须小心不要有内存泄漏.

我所做的就像你建议的那样 – 我自己遍历所有联系人,然后我用表格弹出一个视图,然后选择他们想要的人的名字.我保持一个关联,所以我知道什么地址与什么名称相关联,然后使用系统电子邮件框架,然后填充发送地址.

猜你在找的iOS相关文章