UIViewController 에서 SwiftUI View Struct UI를 호출하는 방법 입니다.

SwiftUI TestView를  UIViewController 에서 사용합니다.

 

[UIKit 에서 SwiftUI 호출 ]

 

SwiftUI TestView

import SwiftUI

struct TestView : View {
	var body: some View {
    	Text("안녕하세요!")    
    }
}

#if DEBUG
struct TestView_Previews : PreviewProvider {
	static var previews: some View {
    	TestView()
    }
}
#endif

 

UIKit TestViewController

TestViewController 에서 버튼 클릭시 SwiftUI TestView를 호출 할 때는 UIHostingController 를 이용하면 됩니다.

present를 하거나 push를 하거나 하면 됩니다.

import UIKit
import SwiftUI

class TestViewController: UIViewController {
	override func viewDidLoad() {
    	super.viewDidLoad()
    }
    
    @IBAction func testButton(_ sender: Any) {
    	let vc = UIHostingController(rootView: TestView())
        self.present(vc, animated: true, completion: nil)
    }
}

 

 

[SwiftUI 에서 UIKit 호출 ]

SwiftUI 에서 UIKit UIViewController 를 사용할 때는 UIViewControllerRepresentable을 상속받아서 사용합니다.

위에 만들어 놓은 TestViewController를 가져다 사용 하겠습니다.

import SwiftUI

struct TestDetailView: UIViewControllerRepresentable {
    typealias UIViewControllerType = TestViewController
    
    func makeUIViewController(context: Context) -> TestViewController {
        
        return TestViewController()
    }
    
    func updateUIViewController(_ uiViewController: TestViewController, context: Context) {
        // ??? 이건 추후 알아보는걸로...
    }
}

struct TestDetailView_Previews: PreviewProvider {
    static var previews: some View {
        TestDetailView()
    }
}

 

대충 임의의 View에서 NavigationLink 이용해서 TestDetailView 호출해주면 TestViewController가 열립니다.

NavigationLink {
    TestDetailView()
} label: {
    MainRowTitle(name: "UIKit ViewController Open")
}

+ Recent posts