Swift3 Swift 3中ContactUI的多项选择
我对用Swift编码很不熟悉,并尝试自学。我很难理解如何在Swift 3中启用ContactPicker视图UI中的多项选择 通过阅读文档,似乎要启用多重选择,我应该使用Swift3 Swift 3中ContactUI的多项选择,swift3,contacts,ios10.3,Swift3,Contacts,Ios10.3,我对用Swift编码很不熟悉,并尝试自学。我很难理解如何在Swift 3中启用ContactPicker视图UI中的多项选择 通过阅读文档,似乎要启用多重选择,我应该使用[CNContactProperty],但这是不明确的。当我这样做时,我无法调用属性来打印givenName和值,因为它们不是数组的成员。另外,当我使用[CNContactProperty]语法时,我的选择器视图没有显示结束选择的“完成”按钮。取消是我离开选取器视图的唯一选项 我已经找到了许多关于以前版本Swift的答案,但我对
[CNContactProperty]
,但这是不明确的。当我这样做时,我无法调用属性来打印givenName和值,因为它们不是数组的成员。另外,当我使用[CNContactProperty]
语法时,我的选择器视图没有显示结束选择的“完成”按钮。取消是我离开选取器视图的唯一选项
我已经找到了许多关于以前版本Swift的答案,但我对如何在Swift 3中使用此功能感兴趣。最后,我尝试在UIMessageComposer
中预先填充联系人字段,以便只需按一下发送按钮,即可从一个数组向多个联系人发送消息
// this is the code that works for a single selection
import UIKit
import ContactsUI
import Contacts
class MainViewController: UIViewController, CNContactPickerDelegate {
// select Contacts to message from "Set Up" Page
@IBAction func pickContacts(_ sender: Any) {
let contactPicker = CNContactPickerViewController()
contactPicker.delegate = self
contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey]
self.present(contactPicker, animated: true, completion: nil)
}
//allow contact selection and dismiss pickerView
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactsProperty: CNContactProperty) {
let contact = contactsProperty.contact
let phoneNumber = contactsProperty.value as! CNPhoneNumber
print(contact.givenName)
print(phoneNumber.stringValue)
}
在您的
CNContactPickerDelegate
实现中,您实现了:
contactPicker(_ picker: CNContactPickerViewController, didSelect contactsProperty: CNContactProperty)
在选择特定属性时调用。但如果要选择多个联系人,则需要实现:
contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact])
返回选定联系人的数组。因此,您的委托实现方法可能如下所示:
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
for contact in contacts {
let phoneNumber = contact.value(forKey:CNContactPhoneNumbersKey)
print(contact.givenName)
print(phoneNumber)
}
}
当然,
phoneNumber
变量将包含一个电话号码数组,您需要在数组中循环以获得特定的号码。谢谢,先生,您是一个救生员。“print(phoneNumber)”命令仍然给了我一个长字符串,所以我做了一个小改动。还是感谢不了你//我对以短字符串形式获取电话号码所做的更改///let phoneNumber=(contact.phoneNumbers[0].value).value(forKey:“digits”)!很乐意帮助:)如果以上答案有用,请不要忘记投票并将其标记为“正确”。