Swift 3中来自ContactUI的多个选择

时间:2017-04-08 04:29:26

标签: swift3 contacts ios10.3

我在Swift编写代码并尝试自学。我无法弄清楚如何从Swift 3中的ContactPicker View UI中启用多项选择。

从阅读文档看来,为了启用多项选择,我应该使用[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)

}

1 个答案:

答案 0 :(得分:2)

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变量将包含一系列电话号码,您需要循环访问数组以获取特定数字。