SwiftUI:从 NavigationView 打开 CNContactViewController?

SwiftUI: Open CNContactViewController from NavigationView?

我正在尝试打开 CNContactViewController 以从 NavigationView 创建新联系人。到目前为止,这是我尝试过但失败了的方法:

  1. 添加了导航栏项并设置了目的地
        .navigationBarItems(trailing:
            NavigationLink(destination: self.addContact()) {
                Text("Add")
            }
        )
  1. addContact函数returns新视图
    func addContact() -> CNContactViewController {
        let con = CNContact()
        let vc = CNContactViewController(forNewContact: con)
        return vc
    }

不幸的是,这似乎不起作用。我是 iOS 和 SwiftUI 的新手,我不确定这是否是这样做的方式,任何帮助将不胜感激!

您必须将 CNContactViewController 嵌入 UIViewControllerRepresentable

Here's the Apple documentation.

还有,here's a non-Apple article关于它。

因为您是 iOS 的新手,请注意 SwiftUI 远未完成且文档齐全。而且 SwiftUI 仅在最新的 iOS 13 上运行,因此并非所有潜在的应用程序用户可能(已经)安装了该 iOS 版本。

完整的解决方案;

 .navigationBarItems(trailing:
            NavigationLink(destination: self.addContact()) {
                Text("Add")
            }
        )

函数;

func addContact() -> MyCNContactViewController {
           let vc = MyCNContactViewController()
           return vc
       }

用于包装 `CNContactViewController`` 的可代表结构

struct MyCNContactViewController: UIViewControllerRepresentable {
    typealias UIViewControllerType = CNContactViewController
  
    func makeUIViewController(context: Context) -> CNContactViewController {
        
        let con = CNContact()
     
        let vc = CNContactViewController(forNewContact: con)
        
        vc.allowsActions = true
        
        return vc
    }

    func updateUIViewController(_ uiViewController: CNContactViewController, context: Context) {
        
    }
}