SwiftUI: Open CNContactViewController from NavigationView?

Viewed 702

I'm trying to open CNContactViewController for creating a new contact from a NavigationView. So far this is what I've tried and failed:

  1. Added a navigation bar item and set the destination
        .navigationBarItems(trailing:
            NavigationLink(destination: self.addContact()) {
                Text("Add")
            }
        )
  1. addContact function returns the new view
    func addContact() -> CNContactViewController {
        let con = CNContact()
        let vc = CNContactViewController(forNewContact: con)
        return vc
    }

Unfortunately this doesn't seem to be working. I'm pretty new to iOS and SwiftUI and I'm not sure if this is the way to do it, any help would be appreciated!

2 Answers

complete solution ;

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

function;

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

represantable struct to wrap `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) {
        
    }
}
Related