2017-04-08 128 views
1

我对Swift的编码非常陌生,并且试图自学。我无法确定如何从Swift 3中的ContactPicker视图UI启用多项选择。从Swift 3的ContactUI中选择多个选项

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

} 

回答

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变量将包括电话号码数组,你需要遍历数组以得到一个具体的数字。

+0

谢谢你,先生你是一个救生员。 “print(phoneNumber)”命令仍然给我一个很长的字符串,但是我做了一个小小的改动。仍然不能够感谢你。 //我将电话号码作为短字符串进行的更改//// let phoneNumber =(contact.phoneNumbers [0] .value).value(forKey:“digits”)! – FatyP33

+0

高兴地帮助:)如果上面的答案有帮助,请不要忘记加注并标记为“正确”。 – Fahim