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