无法使用 UIViewControllerRepresentable 在 SwiftUI 中的 CNContactViewController 中获取删除选项。
结构 CNContactEditControllerRepresentable: UIViewControllerRepresentable { typealias UIViewControllerType = CNContactViewController
var presentingEditContact: Binding<Bool>
var syncContact: Binding<Bool>
var contact: CNContact
func makeCoordinator() -> CNContactEditControllerRepresentable.Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<CNContactEditControllerRepresentable>) -> CNContactEditControllerRepresentable.UIViewControllerType {
let controller = CNContactViewController.init(for: contact)
controller.contactStore = CNContactStore()
controller.delegate = context.coordinator
controller.allowsEditing = true
controller.allowsActions = true
return controller
}
func updateUIViewController(_ uiViewController: CNContactEditControllerRepresentable.UIViewControllerType, context: UIViewControllerRepresentableContext<CNContactEditControllerRepresentable>) {
//
}
// Nested coordinator class, the prefered way stated in SwiftUI documentation.
class Coordinator: NSObject, CNContactViewControllerDelegate {
var parent: CNContactEditControllerRepresentable
init(_ contactDetail: CNContactEditControllerRepresentable) {
self.parent = contactDetail
}
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
if contact != nil {
parent.syncContact.wrappedValue = true
}
parent.presentingEditContact.wrappedValue = false
}
func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
return true
}
}
}