我的应用程序中的ContactsUI有一点小问题。对于iOS 16,当我想要添加一个联系人时,就没有“取消和完成”按钮了。有人知道怎么解决吗?我附加了代码和屏幕
import SwiftUI
import Foundation
import ContactsUI
struct EditInternalContactView: UIViewControllerRepresentable {
typealias UIViewControllerType = CNContactViewController
var contact: Binding<CNContact>
var presentingEditContact: Binding<Bool>
func makeCoordinator() -> EditInternalContactView.Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<EditInternalContactView>) -> Self.UIViewControllerType {
let controller = CNContactViewController(forNewContact: contact.wrappedValue)
controller.delegate = context.coordinator
return controller
}
func updateUIViewController(
_ uiViewController: EditInternalContactView.UIViewControllerType,
context: UIViewControllerRepresentableContext<EditInternalContactView>) {}
}
extension EditInternalContactView {
final class Coordinator: NSObject, CNContactViewControllerDelegate {
var parent: EditInternalContactView
init(_ contactDetail: EditInternalContactView) {
self.parent = contactDetail
}
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
parent.contact.wrappedValue = contact ?? parent.contact.wrappedValue
parent.presentingEditContact.wrappedValue = false
}
func contactViewController(_ viewController: CNContactViewController, shouldPerformDefaultActionFor property: CNContactProperty) -> Bool {
return true
}
}
}

发布于 2022-09-26 15:28:48
我解决了这个问题,所以我给所有有同样问题的人发了答案。
问题是控制器必须位于UINavigationController中,并且您公开了导航控制器。
在这里,代码:
import Foundation
import ContactsUI
import SwiftUI
struct ContactView: UIViewControllerRepresentable {
var isPresenting: Binding<Bool>
var contact: CNContact?
func makeCoordinator() -> ContactView.Coordinator {
Coordinator(self)
}
func makeUIViewController(context: UIViewControllerRepresentableContext<ContactView>) -> UIViewController {
let contactViewController = makeContactViewController
let navigationController = UINavigationController(rootViewController: contactViewController)
contactViewController.delegate = context.coordinator
return navigationController
}
func updateUIViewController(
_ uiViewController: UIViewController,
context: UIViewControllerRepresentableContext<ContactView>) {}
private var makeContactViewController: CNContactViewController {
if let contact = self.contact {
let viewController = CNContactViewController(forNewContact: contact)
viewController.title = nil
return viewController
} else {
return CNContactViewController(forNewContact: contact)
}
}
}
extension ContactView {
final class Coordinator: NSObject, CNContactViewControllerDelegate {
var parent: ContactView
init(_ contactView: ContactView) {
self.parent = contactView
}
func contactViewController(
_ viewController: CNContactViewController,
didCompleteWith contact: CNContact?
) {
parent.isPresenting.wrappedValue = false
}
func contactViewController(
_ viewController: CNContactViewController,
shouldPerformDefaultActionFor property: CNContactProperty
) -> Bool {
return true
}
}
}https://stackoverflow.com/questions/73852778
复制相似问题