Могу ли я использовать View CNContactViewController без сохранения контакта в contactStore? - PullRequest
0 голосов
/ 27 февраля 2019

Я искал не менее 2 часов и не смог найти ответ на этот вопрос.

Мне нужен объект типа CNContact.Я нашел CNContactViewController, и эта точка зрения полностью соответствует моим требованиям.С его помощью я могу создать новый контакт с предопределенным видом, и это дает мне объект CNContact.

Это моя проблема: CNContactViewController сохраняет созданный контакт в contactStore.Но я не хочу этого.Могу ли я подавить это поведение?Я почти уверен, что должно быть решение.

Это мой код для создания ViewController:

let contactController = CNContactViewController(forNewContact: nil)

contactController.allowsEditing = true
contactController.allowsActions = false

contactController.displayedPropertyKeys = [CNContactPostalAddressesKey, CNContactPhoneNumbersKey, CNContactGivenNameKey]

contactController.delegate = self

contactController.view.layoutIfNeeded()

let navigationController = UINavigationController(rootViewController: contactController)
self.present(navigationController, animated: true)

Здесь я хотел бы использовать контакт, не имея его вАдресная книга:

func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
    viewController.navigationController?.dismiss(animated: true)
}

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 14 августа 2019

Я делаю что-то вроде этого:

let contact = CNMutableContact()
contact.contactType = .person
contact.givenName = "giveName"

let cvc = CNContactViewController(forUnknownContact: contact)
cvc.delegate = self
cvc.contactStore = CNContactStore()
cvc.allowsEditing = false
self.navigationController?.pushViewController(cvc, animated: true)

Вы можете разрешить пользователю сохранять контакт во внутреннем хранилище контактов - но он не сохраняется автоматически.

Не забудьте реализовать функции делегата (fx как расширение)

extension MyContactsViewController: CNContactViewControllerDelegate {
    func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
        viewController.dismiss(animated: true, completion: nil)
    }

    func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
        print(property.key)
        return true
    }
}
0 голосов
/ 27 февраля 2019

Но я этого не хочу.Могу ли я подавить это поведение?Я почти уверен, что должно быть решение.

Нет.Если пользователь сохраняет отредактированный контакт (нажимает Готово), то к тому времени, когда вы услышите о нем, он будет сохранен в базе данных контактов, и вы ничего не сможете с этим поделать.

Конечно, вы можете повернуть направо и удалить сохраненный контакт.Но вы не можете предотвратить сохранение с самого начала.

...