CNContactPickerViewController - Невозможно сделать выбор

Я использую CNContactPickerViewControllerчтобы позволить пользователю видеть свой список контактов и выбрать контакт. Однако, хотя я могу показать им их список контактов, нет возможности выбрать какие-либо контакты. Я только ищу их, чтобы выбрать один контакт. В списке имен нет селектора для касания, и если вы нажмете на человека, вы получите его карточку контакта. На этом экране нет ничего, что позволяло бы им выбирать контакт. Итак, нет, я могу показать им их контакты, но они не могут никого выбрать. Я пробовал это как на симуляторе, так и на реальном устройстве.

Ниже приведен класс, который я создал для обработки того, что должно быть простым процессом:

import Foundation
import ContactsUI

class ContactsController: NSObject, CNContactPickerDelegate {

    private var parentController:UIViewController!

    init(parentController:UIViewController) {
        super.init()
        self.parentController = parentController
        openContactList()
    }

    private func openContactList() {
        let picker = CNContactPickerViewController()
        picker.delegate = self
        picker.displayedPropertyKeys = [CNContactPhoneNumbersKey]
        self.parentController.present(picker, animated: true)
    }

    func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) {
        print("\(contact.givenName) \(contact.familyName): \(contact.phoneNumbers.first)")
    }
}

В качестве обновления я реализовал:

func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
    print("Canceled")
}

Этот метод никогда не вызывается. Я предполагаю, что с делегатом что-то не так. Кстати, я переместил создание экземпляров ниже на уровень класса на случай, если он выходит из области видимости. Это не помогло:

let picker = CNContactPickerViewController ()

2 ответа

Проблема заключалась в том, что мой делегат выходил за рамки. Проблема была не в классе, который я разместил в своем ОП. Я звонил в этот класс из IBAction в UITableViewCell который выходил из области видимости, таким образом, этот класс был потерян. Держа мой ContactsController переменная на уровне класса из вызывающего класса, решает эту проблему.

Это весь мой код: -

import UIKit 
import Contacts
import ContactsUI


class ViewController: UIViewController, CNContactPickerDelegate {

override func viewDidLoad() {
    super.viewDidLoad()

}



@IBAction func buttonTapped(_ sender: Any) {

    let peoplePicker = CNContactPickerViewController()
    peoplePicker.delegate = self
    self.present(peoplePicker, animated: true, completion: nil)
}


func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) {
    contacts.forEach { contact in

      print(contact.givenName, contact.familyName)


    }
}

func contactPickerDidCancel(_ picker: CNContactPickerViewController) {
    //your code
}

Другие вопросы по тегам