如何在 iOS 中选择联系人 phone 号码?
How can I pick a contact phone number in iOS?
我知道如何在 iOS 中选择联系人(使用 CNContactPickerViewController),但我如何才能为联系人选择特定的 phone 号码,而不是整个联系人本身?根据文档,这应该是可行的,但我不知道如何实现。
编辑:这是我的代码
CNContactPickerViewController *contactPicker = [[CNContactPickerViewController alloc] init];
contactPicker.delegate = self;
contactPicker.displayedPropertyKeys = @[CNContactGivenNameKey, CNContactImageDataAvailableKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactThumbnailImageDataKey, CNContactIdentifierKey];
[self presentViewController:contactPicker animated:YES completion:nil];
所以,我确实设置了 displayedProperties,但结果是一样的,即使我只选择 CNContactPhoneNumbersKey,我也没有看到所有联系人的号码,所以我可以选择一个特定的号码。
我错过了什么?
编辑 2:回调方法,根据要求。我不知道它们有什么意义,但无论如何。
-(void) contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
//NSLog(@"Contact : %@",contact);
NSString* contactName = [NSString stringWithFormat:@"%@%@%@", contact.givenName, @" ", contact.familyName];
[currentButton setTitle:contactName forState:UIControlStateNormal];
[currentName setText:contactName];
...
}
-(void) contactPickerDidCancel:(CNContactPickerViewController *)picker {
//NSLog(@"Cancelled");
}
您需要设置 displayedKeys
属性 的 CNContactPicker
。如果不设置任何键,则只能select一个联系人。如果您设置键,然后您选择一个联系人,然后您 select 一个想要的联系人 属性。
实施适当的委托方法以完成该过程。
好的,这是答案:
首先,在displayedPropertyKeys
中只使用你想要select的属性(在本例中是CNContactPhoneNumbersKey
),并确保实施所有委托方法(即 didSelectContact
- 当联系人只有一个 phone 号码时,以及 didSelectContactProperty
- 当联系人有多个 phone 号码时)。
此外,通过设置限制接触select离子:
contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count > 0"];
contactPicker.predicateForSelectionOfContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count == 1"];
contactPicker.predicateForSelectionOfProperty = [NSPredicate predicateWithFormat:@"key == 'phoneNumbers'"];
我知道如何在 iOS 中选择联系人(使用 CNContactPickerViewController),但我如何才能为联系人选择特定的 phone 号码,而不是整个联系人本身?根据文档,这应该是可行的,但我不知道如何实现。
编辑:这是我的代码
CNContactPickerViewController *contactPicker = [[CNContactPickerViewController alloc] init];
contactPicker.delegate = self;
contactPicker.displayedPropertyKeys = @[CNContactGivenNameKey, CNContactImageDataAvailableKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey, CNContactThumbnailImageDataKey, CNContactIdentifierKey];
[self presentViewController:contactPicker animated:YES completion:nil];
所以,我确实设置了 displayedProperties,但结果是一样的,即使我只选择 CNContactPhoneNumbersKey,我也没有看到所有联系人的号码,所以我可以选择一个特定的号码。
我错过了什么?
编辑 2:回调方法,根据要求。我不知道它们有什么意义,但无论如何。
-(void) contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact{
//NSLog(@"Contact : %@",contact);
NSString* contactName = [NSString stringWithFormat:@"%@%@%@", contact.givenName, @" ", contact.familyName];
[currentButton setTitle:contactName forState:UIControlStateNormal];
[currentName setText:contactName];
...
}
-(void) contactPickerDidCancel:(CNContactPickerViewController *)picker {
//NSLog(@"Cancelled");
}
您需要设置 displayedKeys
属性 的 CNContactPicker
。如果不设置任何键,则只能select一个联系人。如果您设置键,然后您选择一个联系人,然后您 select 一个想要的联系人 属性。
实施适当的委托方法以完成该过程。
好的,这是答案:
首先,在displayedPropertyKeys
中只使用你想要select的属性(在本例中是CNContactPhoneNumbersKey
),并确保实施所有委托方法(即 didSelectContact
- 当联系人只有一个 phone 号码时,以及 didSelectContactProperty
- 当联系人有多个 phone 号码时)。
此外,通过设置限制接触select离子:
contactPicker.predicateForEnablingContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count > 0"];
contactPicker.predicateForSelectionOfContact = [NSPredicate predicateWithFormat:@"phoneNumbers.@count == 1"];
contactPicker.predicateForSelectionOfProperty = [NSPredicate predicateWithFormat:@"key == 'phoneNumbers'"];