首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ContactUI不取消和完成按钮来解决iOS16

如何用ContactUI不取消和完成按钮来解决iOS16
EN

Stack Overflow用户
提问于 2022-09-26 10:23:13
回答 1查看 23关注 0票数 0

我的应用程序中的ContactsUI有一点小问题。对于iOS 16,当我想要添加一个联系人时,就没有“取消和完成”按钮了。有人知道怎么解决吗?我附加了代码和屏幕

代码语言:javascript
复制
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
    }
  }
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-26 15:28:48

我解决了这个问题,所以我给所有有同样问题的人发了答案。

问题是控制器必须位于UINavigationController中,并且您公开了导航控制器。

在这里,代码:

代码语言:javascript
复制
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
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73852778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档