Mazharul Belal
Mazharul Belal

Reputation: 105

What is the best way open UIKit ViewController from SwiftUI

I am not getting the proper solution, How to open UIKit ViewController(With Navigation Controller) from SwiftUI Button clicked.

Upvotes: 4

Views: 7090

Answers (2)

Hardik Shekhat
Hardik Shekhat

Reputation: 1878

You can do it by using the UIViewControllerRepresentable protocol which is used to manage your UIKit ViewController in the SwiftUI.

Here is the code to show your ViewController from SwiftUI View interface.

SwiftUI View

struct ContentView: View {

    @State var isOpenView = false

    var body: some View {
    
        NavigationView {

            VStack {

                //show your view controller
                NavigationLink(destination: TestControllerView(), isActive: $isOpenView) {
                    EmptyView()
                }
            
                Button(action: {
                    self.isOpenView = true
                }){
                    Text("Tap Me")
                }                    
            }
        }
    }
}

Now wrap your ViewController into UIViewControllerRepresentable

struct TestControllerView : UIViewControllerRepresentable {

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

     func makeUIViewController(context: Context) -> some UIViewController {

        guard let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(identifier: "TestViewController") as? TestViewController else {
            fatalError("ViewController not implemented in storyboard")
        }
    
        return viewController
     }
}

Here is your ViewController.Swift File code

import UIKit

class TestViewController: UIViewController {

     override func viewDidLoad() {
         super.viewDidLoad()
         // Do any additional setup after loading the view.
     }

     @IBAction func btnBackClicked(_ sender : UIButton) {
         self.dismiss(animated: true, completion: nil)
     }
}

Upvotes: 4

RelativeJoe
RelativeJoe

Reputation: 5104

First, wrap your UIViewController in a UIViewControllerRepresantable like so.

Then present that View using .fullScreenCover

Upvotes: 1

Related Questions