首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从不调用contactPickerDidCancel和contactPicker函数

从不调用contactPickerDidCancel和contactPicker函数
EN

Stack Overflow用户
提问于 2016-12-24 15:32:03
回答 3查看 452关注 0票数 0

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

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

代码语言:javascript
复制
@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.")
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-04-27 14:58:16

你必须用新的签名重写CNContactPickerDelegate方法:

代码语言:javascript
复制
func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
    //handle contact
}

func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
    //handle cancel event
}

下划线_将在新的语法中省略方法中的参数标签。所以使用新的签名。

票数 1
EN

Stack Overflow用户

发布于 2016-12-24 15:46:17

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

票数 0
EN

Stack Overflow用户

发布于 2016-12-24 21:48:56

你是否让你的视图控制器符合CNContactPickerDelegate??

代码语言:javascript
复制
class MyViewController: UIViewController, CNContactPickerDelegate {

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41311318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档