从IOS中的移动联系人获取联系人姓名和号码

从IOS中的移动联系人获取联系人姓名和号码,ios,swift,contacts,Ios,Swift,Contacts,我想在我的应用程序中实现这个过程。但是本教程中的代码是针对较旧的IOS版本的,我使用的是IOS 10、Xcode 8.2、Swift 3.0,所以它对我不起作用。我尝试了以下代码来显示联系人列表。它起作用了 import UIKit import ContactsUI class ViewController: UIViewController, CNContactPickerDelegate{ @IBOutlet weak var textLabel: UILabel! ov

我想在我的应用程序中实现这个过程。但是本教程中的代码是针对较旧的IOS版本的,我使用的是IOS 10、Xcode 8.2、Swift 3.0,所以它对我不起作用。我尝试了以下代码来显示联系人列表。它起作用了

import UIKit
import ContactsUI
class ViewController: UIViewController, CNContactPickerDelegate{

    @IBOutlet weak var textLabel: UILabel!
    override func viewDidLoad()
    {
        super.viewDidLoad()

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }
    func addExistingContact()
    {

    }
    func contactPicker(picker: CNContactPickerViewController, didSelectContact contacts: CNContact)
    {
       // print(contacts.givenName)

    }

    @IBAction func button(_ sender: Any)
    {
        let contactPicker = CNContactPickerViewController()
        contactPicker.delegate = self
        contactPicker.displayedPropertyKeys =
            [CNContactGivenNameKey
                , CNContactPhoneNumbersKey]
        self.present(contactPicker, animated: true, completion: nil)
    }

    func contactPickerDidCancel(picker: CNContactPickerViewController)
    {
        print("Cancel Contact Picker")
    }
}

现在,我想要的是,当我从列表中选择任何联系人姓名时,联系人列表必须立即消失,然后所选姓名和号码必须显示在viewController中的两个标签/文本字段中。有人能告诉我应该使用什么代码吗?提前感谢。

将方法
联系人选择器(选择器:CNContactPickerViewController,DIDSelectContacts:CNContact)
联系人选择器IDCancel(选择器:CNContactPickerViewController)
替换为

func contactPicker(_ picker: CNContactPickerViewController, 
              didSelect contactProperty: CNContactProperty) {

}

func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
     // You can fetch selected name and number in the following way

    // user name
    let userName:String = contact.givenName 

    // user phone number
    let userPhoneNumbers:[CNLabeledValue<CNPhoneNumber>] = contact.phoneNumbers        
    let firstPhoneNumber:CNPhoneNumber = userPhoneNumbers[0].value 

    // user phone number string
    let primaryPhoneNumberStr:String = firstPhoneNumber.stringValue 
}

func contactPickerDidCancel(_ picker: CNContactPickerViewController) {

}

我会告诉你如何得到你的联系人名单。文章的最后一部分(列表内容)你必须自己做,因为这只是在玩TableView控制器。 首次进口:

import Contacts
例如,我使用此功能获取所有联系人:

   let store = CNContactStore()
        var contacts = [CNContact]()
        let keys = [CNContactFormatter.descriptorForRequiredKeys(for: .fullName), CNContactSocialProfilesKey] as [Any]
        let request = CNContactFetchRequest(keysToFetch: keys as! [CNKeyDescriptor])


        do{
            try store.enumerateContacts(with: request){
                (contact, stop) in
                  contacts.append(contact)
            }

            guard contacts.count > 0 else{
                //Show contact list
                return
            }
        } catch let err{
            print(err)
        }
此外,在代码中的某个地方,您需要请求联系权限:

switch CNContactStore.authorizationStatus(for: .contacts){
                        case .authorized:
                             //
                        case .notDetermined:
                            store.requestAccess(for: .contacts){succeeded, err in
                                guard err == nil && succeeded else{
                                    return
                                }
                            }
                        case .denied:
                            //
                        case .restricted:
                            //
                        default:
                            print("Not handled")
                    }
重要提示:添加您的信息。列表:

Privacy - Contacts Usage Description

请告诉我,当我点击任何联系人姓名时,我应该在这些方法中使用什么代码来立即关闭联系人列表。必须打印选定的姓名和号码。@测试人员,我相信我当前编辑的答案可以解决问题。如果我遗漏了什么,请告诉我。我得到了我的联系人名单,伙计,使用帖子中的代码。我只想选择一个联系人姓名。并且必须打印选定的联系人姓名和号码,同时联系人列表必须消失。
Privacy - Contacts Usage Description