71 lines
2.2 KiB
Swift
71 lines
2.2 KiB
Swift
import Contacts
|
|
import ContactsUI
|
|
import SwiftUI
|
|
|
|
struct ContactDetailView: UIViewControllerRepresentable {
|
|
let contact: CNContact
|
|
let contactStore: CNContactStore
|
|
let onDismiss: () -> Void
|
|
|
|
func makeCoordinator() -> Coordinator {
|
|
Coordinator(onDismiss: onDismiss)
|
|
}
|
|
|
|
func makeUIViewController(context: Context) -> CNContactViewController {
|
|
let controller = CNContactViewController(for: contact)
|
|
controller.contactStore = contactStore
|
|
controller.delegate = context.coordinator
|
|
controller.allowsEditing = true
|
|
controller.allowsActions = true
|
|
return controller
|
|
}
|
|
|
|
func updateUIViewController(_ uiViewController: CNContactViewController, context: Context) {
|
|
uiViewController.contactStore = contactStore
|
|
}
|
|
|
|
final class Coordinator: NSObject, CNContactViewControllerDelegate {
|
|
private let onDismiss: () -> Void
|
|
|
|
init(onDismiss: @escaping () -> Void) {
|
|
self.onDismiss = onDismiss
|
|
}
|
|
|
|
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
|
|
onDismiss()
|
|
}
|
|
}
|
|
}
|
|
|
|
struct NewContactView: UIViewControllerRepresentable {
|
|
let contactStore: CNContactStore
|
|
let onDismiss: () -> Void
|
|
|
|
func makeCoordinator() -> Coordinator {
|
|
Coordinator(onDismiss: onDismiss)
|
|
}
|
|
|
|
func makeUIViewController(context: Context) -> UINavigationController {
|
|
let controller = CNContactViewController(forNewContact: nil)
|
|
controller.contactStore = contactStore
|
|
controller.delegate = context.coordinator
|
|
let nav = UINavigationController(rootViewController: controller)
|
|
return nav
|
|
}
|
|
|
|
func updateUIViewController(_ uiViewController: UINavigationController, context: Context) {
|
|
}
|
|
|
|
final class Coordinator: NSObject, CNContactViewControllerDelegate {
|
|
private let onDismiss: () -> Void
|
|
|
|
init(onDismiss: @escaping () -> Void) {
|
|
self.onDismiss = onDismiss
|
|
}
|
|
|
|
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
|
|
onDismiss()
|
|
}
|
|
}
|
|
}
|