从 IOS 中的手机联系人获取联系人姓名和电话号码
Getting people name and number from mobile contact in IOS
我想要在我的应用程序中使用这个过程 https://www.youtube.com/watch?v=HKCXwm7r838。但本教程中的代码适用于较旧的 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")
}
}
现在,我想要的是,当我select列表中的任何联系人姓名时,联系人列表必须立即消失,然后selected姓名和号码必须显示在两个labels/textFields 在 viewController 中。有人可以告诉我应该使用什么代码吗?提前致谢。
将方法 contactPicker(picker: CNContactPickerViewController, didSelectContact contacts: CNContact)
和 contactPickerDidCancel(picker: 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) {
}
鉴于您的要求是在单击联系人后立即关闭 ContactPicker,您不应该实现以下方法。 从您的代码中删除以下给定的方法。
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
}
func contactPicker(_ picker: CNContactPickerViewController, didSelectContactProperties contactProperties: [CNContactProperty]) {
}
我会告诉你如何得到你的联系人列表。 post 的最后一部分(列表内容)您必须自己完成,因为它只是在玩 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")
}
重要提示: 添加您的 info.plist:
Privacy - Contacts Usage Description
我想要在我的应用程序中使用这个过程 https://www.youtube.com/watch?v=HKCXwm7r838。但本教程中的代码适用于较旧的 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")
}
}
现在,我想要的是,当我select列表中的任何联系人姓名时,联系人列表必须立即消失,然后selected姓名和号码必须显示在两个labels/textFields 在 viewController 中。有人可以告诉我应该使用什么代码吗?提前致谢。
将方法 contactPicker(picker: CNContactPickerViewController, didSelectContact contacts: CNContact)
和 contactPickerDidCancel(picker: 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) {
}
鉴于您的要求是在单击联系人后立即关闭 ContactPicker,您不应该实现以下方法。 从您的代码中删除以下给定的方法。
func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
}
func contactPicker(_ picker: CNContactPickerViewController, didSelectContactProperties contactProperties: [CNContactProperty]) {
}
我会告诉你如何得到你的联系人列表。 post 的最后一部分(列表内容)您必须自己完成,因为它只是在玩 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")
}
重要提示: 添加您的 info.plist:
Privacy - Contacts Usage Description