从不调用contactPickerDidCancel和contactPicker函数

时间:2016-12-24 07:32:03

标签: ios swift

您好我是iOS设计和Swift的新手,我试图实现一个简单的联系人选择器,允许用户只选择一个联系人。我在视图控制器中有一个按钮,视图控制器符合CNContactPickerDelegate,但是当我运行应用程序并使用选择器时,无论我在选择器内按什么,我的contactPickerDidCancel函数和我的contactPicker函数都不会被调用。据我了解,当我点击取消按钮或选择器内的联系人时,选择器应该调用我写的函数。这是错的吗?任何帮助或想法都会很棒!谢谢!

更新:已解决。这是一个简单的语法错误。在这两个函数中,我没有在#34; picker"之前加下下划线。

@IBAction func addContactPressed(_ sender: Any) {

    let contactPickerViewController = CNContactPickerViewController()

    contactPickerViewController.delegate = self

    contactPickerViewController.predicateForEnablingContact = NSPredicate(format: "phoneNumbers.@count > 0", argumentArray: nil)

    contactPickerViewController.predicateForSelectionOfProperty =
        NSPredicate(format: "key == 'phoneNumbers'", argumentArray: nil)

    contactPickerViewController.displayedPropertyKeys = [CNContactEmailAddressesKey, CNContactPhoneNumbersKey]

    self.present(contactPickerViewController, animated: true, completion: nil)

}


func contactPickerDidCancel(picker: CNContactPickerViewController) {
    print("Cancelled picking a contact.")
}

func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) {
    print("Selected a contact.")
    if contact.isKeyAvailable(CNContactPhoneNumbersKey) {
        print(contact.phoneNumbers)
    }
    else {
        print("No phone numbers are available.")
    }
}

3 个答案:

答案 0 :(得分:1)

您必须使用新签名重写func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { //handle contact } func contactPickerDidCancel(_ picker: CNContactPickerViewController) { //handle cancel event } 方法:

_

下划线swift从新1 + (++1) 语法中的方法中省略参数标签。所以使用新的签名。

答案 1 :(得分:0)

将联系人选择器移到该功能之外,一旦超出该范围,就会失去对它的引用。您可以将其设为可选项,然后在单击按钮后对其进行初始化。

答案 2 :(得分:0)

您是否使视图控制器符合 CNContactPickerDelegate ??

class MyViewController: UIViewController, CNContactPickerDelegate {

    }