2011-04-02 197 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

乾杯,祝你好運! (^_^)

相關問題