iOS Swift CNContactPickerViewController 搜索联系人并添加到选择
Posted
技术标签:
【中文标题】iOS Swift CNContactPickerViewController 搜索联系人并添加到选择【英文标题】:iOS Swift CNContactPickerViewController search contact and add to selection 【发布时间】:2016-11-03 18:42:38 【问题描述】:我正在使用 ios 9 和 Swift 2.2
我已经实现了 iOS 内置的 CNContactPickerViewController
使用 CNContactPickerDelegate
来获取联系号码,
在CNContactPickerViewController
屏幕中,当我单击顶部的搜索字段并搜索姓名时,我需要将该姓名添加到我的选择中,但点击联系人后没有任何反应。
我到处搜索,并没有找到任何解决方案
我需要在我的代码中添加任何内容还是 iOS 9 错误
@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)
【问题讨论】:
这是一个已知问题:请参阅openradar.me/25433471。 我只是想确认这在 iOS 10 中尚未修复。 Nop iOS 10.2 也没有修复 iOS 10.3.1 中仍未修复!!! 嗨,苏杰。你解决了那个问题吗?我也面临同样的问题。 【参考方案1】:搜索结果似乎仅在单选模式下工作,因此请确保实施
func contactPicker(CNContactPickerViewController, didSelect: CNContact)
只有,但不是
func contactPicker(CNContactPickerViewController, didSelect: [CNContact])
如果您同时实现两者,则只接受一个 CNContact
作为参数的版本将被忽略,而是使用多选模式。
【讨论】:
太棒了!我想在此回复中添加 100 非常感谢@bbjay 这对我不起作用,委托方法 func contactPicker(CNContactPickerViewController, didSelect: CNContact) 在搜索后选择时永远不会被调用 @iOSMonster 您是否正确设置了您的委托?也许问一个新问题并显示您的代码【参考方案2】: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)
【讨论】:
这里是代表。我得到这个“使用未解析的标识符'代表'”如何解决这个问题【参考方案3】:这是 swift 4 版本
@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
【讨论】:
【参考方案4】:多选和搜索是互斥的。如果您希望搜索正常工作,则必须仅使用单选并仅实现单选委托方法。
【讨论】:
以上是关于iOS Swift CNContactPickerViewController 搜索联系人并添加到选择的主要内容,如果未能解决你的问题,请参考以下文章