I've found a solution to re-showing the people picker after selecting a property.
Implement the delegate method that handles when a person chooses a contact property (only called by iOS 8): The trick for me was to dismiss then picker, then immediately call my "show picker" method in the completion delegate (yes, a delegate within a delegate).
// Dismisses the people picker and shows the application when users tap Cancel.
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
[self.picker dismissViewControllerAnimated:NO completion:^{
NSLog(@"just dismissed the picker");
[self showPeoplePickerController];
}];
}
Make sure to init the people picker once if you want it to show up where it last left off. Hope this helps
here is my showPeoplePickerController method
#pragma mark Show all contacts
// Called when users tap "Display Picker" in the application. Displays a list of contacts and allows users to select a contact from that list.
-(void)showPeoplePickerController
{
picker.peoplePickerDelegate = self;
picker.delegate = self;
picker.visibleViewController.searchDisplayController.searchBar.delegate = self;
[self presentViewController:picker animated:NO completion:nil];
}
First initialize the picker. Note that there is an authorization method call required for contacts access in the first place
picker = [[ABPeoplePickerNavigationController alloc] init];
//have self prompt first, then based off answer prompt them with internal address book stuff or now
if(ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
// show picker UI if the user has granted access to their Contacts
[self showPeoplePickerController];
}
NOTES:
- I previously initiated people picker when the view loaded. once.
- setting the "animated" option to NO on presenting and dismissing controller helps make transition smoother.