我可以使用视图CNContactViewController,而无需将联系人保存到联络店



我现在搜索至少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)
}

感谢您的帮助!

,但我不想要这个。我可以抑制这种行为吗?我很确定必须有解决方案。

没有。如果用户保存了已编辑的联系人(完成的TAPS),那么当您听到它时,它已将其保存到联系人数据库中,并且您无能为力。

当然,您可以转身并删除保存的联系人。但是您无法阻止储蓄开始。

我正在做这样的事情:

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
    }
}

最新更新