iOS Swift CNContactPickerViewController search contact and add to selection
The search results seem to be working in single selection mode only, so make sure you implement
func contactPicker(CNContactPickerViewController, didSelect: CNContact)
only, but not
func contactPicker(CNContactPickerViewController, didSelect: [CNContact])
If you implement both, the version wich takes only one CNContact
as argument is ignored and the multi selection mode is used instead.
Use this updated code and @IBAction func AddBtnKlkFnc(sender: AnyObject) { let contactPicker = CNContactPickerViewController() contactPicker.delegate = self contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey] self.presentViewController(contactPicker, animated: true, completion: nil) } func contactPicker(picker: CNContactPickerViewController, didSelectContacts ContctAryVar: [CNContact]) { for ContctVar in ContctAryVar { let ContctDtlVar = ContctDtlCls() ContctDtlVar.ManNamVar = CNContactFormatter.stringFromContact(ContctVar, style: .FullName)! for ContctNumVar: CNLabeledValue in ContctVar.phoneNumbers { var MobNumVar = ((ContctNumVar.value as! CNPhoneNumber).valueForKey("digits") as? String)! if(MobNumVar.Len() > 10) { MobNumVar = MobNumVar.GetLstSubSrgFnc(10) } ContctDtlVar.MobNumVar = MobNumVar ContctDtlAryVar.append(ContctDtlVar) } } delegate.didFetchContacts([contact]) navigationController?.popViewControllerAnimated(true) }
Here is a swift 4 version
@IBAction func addPhoneContact(_ sender: UIButton) { let contactPicker = CNContactPickerViewController() contactPicker.delegate = self contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey] self.present(contactPicker, animated: true, completion: nil)}extension ViewController: CNContactPickerDelegate { func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { picker.dismiss(animated: true, completion: nil) let name = CNContactFormatter.string(from: contact, style: .fullName) for number in contact.phoneNumbers { let mobile = number.value.value(forKey: "digits") as? String if (mobile?.count)! > 7 { // your code goes here } } }}