VeeContactPicker is an Objective-C replacement of the buggy ABPeoplePickerNavigationController: a ViewController for selecting contacts from the address book.
- 🏃🏿 It loads the contacts very fast! Note that the official ABPeoplePickerNavigationController is really slow: see this thread)
- 👨👨👧👧 You can select multiple contacts! 🎉🎉 New from v1 🎉🎉
- 🔵 Contacts' images and coloured placeholders
- 🔍 Search for your contacts! Also by email address or phone number.
- 🛂 Choose the contacts that you want to show in the picker (e.g only contacts with a valid email address)
- 🤡 Easy customizable appearance
- ✅ Good test coverage
Add contact
usage key to project info.plist file :
<key>NSContactsUsageDescription</key>
<string>This app requires contacts access to function properly.</string>
Import the ViewController:
# import "VeeContactPickerViewController.h"
Initialize it and set the delegate:
VeeContactPickerViewController *veeContactPickerViewController = [[VeeContactPickerViewController alloc] initWithDefaultConfiguration];
veeContactPickerViewController.contactPickerDelegate = self;
//do you want to select multiple contacts? veeContactPickerViewController.multipleSelection = YES;
[self presentViewController:veeContactPickerViewController animated:YES completion:nil];
Implement the delegate:
- (void)didSelectContact:(id<VeeContactProt>)veeContact
{
//veeContact was selected
}
- (void)didSelectContacts:(NSArray<id<VeeContactProt>> *)veeContacts
{
//veeContact were selected
}
- (void)didCancelContactSelection
{
//No contact was selected
}
- (void)didFailToAccessAddressBook
{
//Show an error?
}
That's all folks!
You can customize some properties of the picker by changing the VeeContactPickerOptions object and pass it to the initializer:
- (instancetype)initWithOptions:(VeeContactPickerOptions*)veeContactPickerOptions;
For example, if you don't like the contacts' initials images as the placeholder, you can set your own placeholder image:
VeeContactPickerOptions *veeContactPickerOptions = [VeeContactPickerOptions alloc] initWithDefaultOptions];
veeContactPickerOptions.showInitialsPlaceholder = NO;
veeContactPickerOptions.contactThumbnailImagePlaceholder = [UIImage imageNamed:@"your_placeholder"];
//...
VeeContactPickerViewController *veeContactPickerViewController = [[VeeContactPickerViewController alloc] initWithOptions:veeContactPickerOptions];
//...
Contact's image placeholder are provided by AGCInitials. You can customize the color palette if you want, see the README of AGCInitials.
- If you want to change or localize the strings shown by the picker, look at this property:
veeContactPickerOptions.veeContactPickerStrings
- If you want to choose which contacts to show, you can initialize the picker using:
- (instancetype)initWithVeeContacts:(NSArray<id<VeeContactProt>>*)veeContacts;
Picker Appearance:
You can customize the appearance of the contact picker by manipulating the object VeeContactPickerAppearanceConstants, before loading the picker.
For example:
[[VeeContactPickerAppearanceConstants sharedInstance] setNavigationBarTintColor:[UIColor purpleColor]];
[[VeeContactPickerAppearanceConstants sharedInstance] setNavigationBarTranslucent:NO];
[[VeeContactPickerAppearanceConstants sharedInstance] setContactCellPrimaryLabelFont:[UIFont yourFont]];
//...
[self presentViewController:veeContactPickerViewController animated:YES completion:nil];
To run the example project, clone the repo, and run pod install
from the Example directory first.
Or you can even try the example online with Appetize.
- iOS 8+
VeeContactPicker is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "VeeContactPicker"
Code Atlas SRL [email protected] Andrea Cipriani [email protected] - Main developer
VeeContactPicker is available under the MIT license. See the LICENSE file for more info.
VeeContactPicker is already used in the App Store for our app Veer Contacts Widget; if you appreciate our work, you can download the app for free! 🤗