How to display only contacts with a phone number?

I have a recipient selector. But I want to display only contacts that have a phone number before choosing it.

This is how I get the modal look:

-(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]; 
}

Any idea how to do this?

+5
source share
2 answers

I tested this should work. You may need to configure it ^ - ^

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);
+5
source

All Articles