In theory, you would use the predicateForSelectionOfContact and predicateForSelectionOfProperty properites:
let cpvc: CNContactPickerViewController = CNContactPickerViewController()
cpvc.delegate = self
cpvc.predicateForSelectionOfContact = NSPredicate(value: false) //show detail card for all contacts when tapped
cpvc.predicateForSelectionOfProperty = NSPredicate(value: true) //call delegate method for all properties when tapped
When a contact property is tapped, the CNContactPickerDelegate method -contactPicker:DidSelectContactProperty should be called. However, there is a bug in iOS 9 beta, and that delegate method is not called, and the contact detail is not closed (sometimes I'm seeing it go blank after a few seconds).
My workaround is to just let CNContactPickerViewController select the contact (i.e., don't set predicateForSelectionOfContact), get the contact in contactPicker:didSelectContact, and present the list of contact properties in my own table view controller that the user can select from.
I've filed a bug report #21569949, which is closed as a duplicate of #21165461, which is still open. Actually I noticed this with CNContactViewController, but I'm pretty sure it is the same bug (i.e. CNContactPickerViewController is showing a CNContactViewController for the selected contact, and the bug is in CNContactViewController).