【问题标题】:Display detailed contact card if contact has more than 1 phone number如果联系人有超过 1 个电话号码,则显示详细的联系人卡片
【发布时间】:2016-07-21 02:21:29
【问题描述】:

如果一个联系人只有 1 个电话号码,我想选择它。如果它有超过 1 个电话号码,那么我想显示详细的联系人卡片。

我正在使用以下方法,效果很好。

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

然后,我实现了这个 Utility 方法来显示详细的联系人卡片:

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

但是这个方法永远不会被调用? 如果我注释掉第一种方法,则调用第二种方法。我如何同时调用两者,或者有其他方法可以实现吗?

【问题讨论】:

    标签: ios xcode ios8 xcode8 abpeoplepickerview


    【解决方案1】:

    解决方案是在启动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:@"phoneNumbers.@count = 1"];
    
        }
        [self presentViewController:peoplePicker animated:NO completion:nil];
    }
    

    类似地,对于 emailAdresses,将 @"phoneNumbers.@count = 1" 替换为 @"emailAddresses.@count = 1"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多