Files
kontakte/Kontakte/ContactDetailView.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()
}
}
}