1

我对使用 Swift 编码并尝试自学非常陌生。我无法弄清楚如何从 Swift 3 中的 ContactPicker View UI 启用多项选择。

从阅读文档看来,我应该使用启用多项选择[CNContactProperty],但这是模棱两可的。当我这样做时,我无法调用属性来打印 givenName 和值,因为它们不是数组的成员。此外,当我使用[CNContactProperty]我的选择器视图的语法时,不会显示“完成”按钮来结束选择。取消是我退出选择器视图的唯一选择。

我已经为以前版本的 Swift 找到了许多答案,但我对如何在 Swift 3 中使用此功能感兴趣。最终,我试图在 a 中预填充联系人字段,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)

}
4

1 回答 1

3

在您的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变量将包含一个电话号码数组,您需要遍历该数组以获取特定号码。

于 2017-04-08T04:42:43.113 回答