2011-04-02 193 views
5

我有收件人选取器视图。但是我想在我选择一个之前只显示有电话号码的联系人。如何只显示电话号码的联系人?

这是我得到的模态视图:

-(void)messageWillShowRecipientPicker{ 
    ABPeoplePickerNavigationController *picker = 
       [[ABPeoplePickerNavigationController alloc] init]; 
    picker.peoplePickerDelegate = self; 

    NSArray *displayedItems = 
       [NSArray arrayWithObject:[NSNumber 
         numberWithInt:kABPersonPhoneProperty]]; 

    picker.displayedProperties = displayedItems; 
    // Show the picker 
    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 

任何想法如何做到这一点?

回答

5

我测试了这一点,应该工作。可能必须调整它^ -^

ABAddressBookRef addressBook = ABAddressBookCreate(); 
    NSArray *allContacts = [(NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook)autorelease]; 
    for (int i =0; i < allContacts.count; i++) { 
     ABRecordRef person = [allContacts objectAtIndex:i]; 
     if (person != nil) { 
      ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
      if (ABMultiValueGetCount(phones) == 0) { 
       CFErrorRef error = nil; 
       ABAddressBookRemoveRecord(addressBook, person, &error); 
       NSLog(@"Removing %@",(NSString *)ABRecordCopyCompositeName(person)); 
      } 
      CFRelease(phones); 
     } 
    } 
    CFErrorRef saveError = nil; 
    ABAddressBookSave(addressBook, &saveError); 

    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
    picker.peoplePickerDelegate = self; 
    picker.addressBook = addressBook; 

    NSArray *displayedItems = 
    [NSArray arrayWithObject:[NSNumber 
           numberWithInt:kABPersonPhoneProperty]]; 

    picker.displayedProperties = displayedItems; 

    // Show the picker 
    [self presentModalViewController:picker animated:YES]; 

    CFRelease(addressBook); 
+2

不会'ABAddressBookSave()'从主地址簿数据库中删除被过滤掉的联系人吗? – Peter 2013-03-07 02:25:47

2

您可以使用NSPredicate来过滤数据,但您可能需要创建一个代理对象来处理AddressBook或协议。

退房https://github.com/erica/ABContactHelper/blob/master/ABContactsHelper.m为通讯录和苹果的谓词信息在这里http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pUsing.html一个协议的一个例子,在这里http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSPredicate_Class/Reference/NSPredicate.html

干杯,祝你好运! (^_^)

相关问题