2016-07-20 8 views
1

연락처에 전화 번호가 하나만있는 경우 선택하고 싶습니다. 전화 번호가 두 개 이상인 경우 자세한 연락처 카드를 표시하고 싶습니다.연락처에 전화 번호가 두 개 이상있는 경우 세부 연락처 카드 표시

아래의 방법을 사용하고 있습니다. 정상적으로 작동합니다. 그러나이 방법은 결코

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { 

    NSString* phone = nil; 
    ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    if (ABMultiValueGetCount(phoneNumbers) > 0) { 
     CFIndex index = ABMultiValueGetIndexForIdentifier(phoneNumbers, identifier); 
     phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, index); 
    } 
} 

를 호출되지 가져옵니다

- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person { 

    if (person != nil) { 
     ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 
     if (ABMultiValueGetCount(phoneNumbers) == 1) { 
      //Do stuff to select phone number 
     } 
    } 
} 

그럼, 자세한 연락처 카드를 표시하려면이 유틸리티 메소드를 구현? 첫 번째 메서드를 주석 처리하면 두 번째 메서드가 호출됩니다. 어떻게 둘 다 호출 할 수 있습니까? 아니면이를 수행 할 수있는 또 다른 방법이 있습니까?

답변

0

솔루션이가 될 것이라고이 경우 peoplePicker을 시작하기 전에 predicate를 추가하는 것입니다 것입니다 :

-(void)getContacts { 
    ABPeoplePickerNavigationController *peoplePicker = [[ABPeoplePickerNavigationController alloc] init]; 
    peoplePicker.peoplePickerDelegate = self; 
    if ([peoplePicker respondsToSelector:@selector(setPredicateForSelectionOfPerson:)]) 
    { 
     // The people picker will select a person that has exactly one phone number and call peoplePickerNavigationController:didSelectPerson:, 
     // otherwise the people picker will present an ABPersonViewController for the user to pick one of the Phone Numbers. 
     peoplePicker.predicateForSelectionOfPerson = [NSPredicate predicateWithFormat:@"[email protected] = 1"]; 

    } 
    [self presentViewController:peoplePicker animated:NO completion:nil]; 
} 

유사 emailAdresses의 경우 대체 : @"[email protected] = 1"@"[email protected] = 1".