호스팅 컨트롤러는 UIViewController의 하위 클래스이므로 UIKit과 호환됩니다. UIHostingController는 기존 UIKit 기반 프로젝트에 SwiftUI를 사용할 수있게 해줍니다.
HostingViewController
를 사용하여 SwiftUI View는 전체 scen 또는 기존 UIKit 내의 개별 구성 요소로 사용될 수 있습니다.
지금부터 SwiftUI를 HostingViewController
를 사용해서 UIkit에 적용하는 법을 알아보겠습니다.
먼저 Storyboard를 사용하는 UIKit기반 프로젝트를 하나 만들어주세요. 기본 ViewController에는 간단한 UIImage, UILabel 및 UIButton이 포함되어 있습니다.
UIButton을 탭하면 ViewController에서 SwiftUI로 개발된 View로 이동하도록 하겠습니다.
이동하려는 버튼을 제어하는 ViewController.swift 파일로 이동합니다.
class ViewController: UIViewController {
// 1. Create the IBAction outlet
@IBAction func goToSwiftUIView(_ sender: Any) {
// add action
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
class ViewController: UIViewController {
// 2. Create a UIHostingController
let swiftUIController = UIHostingController(rootView: SwiftUIView())
// 1. Create the IBAction outlet
@IBAction func goToSwiftUIView(_ sender: Any) {
// add action
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
class ViewController: UIViewController {
// 2. Create a UIHostingController
let swiftUIController = UIHostingController(rootView: SwiftUIView())
// 1. Create the IBAction outlet
@IBAction func goToSwiftUIView(_ sender: Any) {
// 3. Push the UIHostingController
navigationController?.pushViewController(swiftUIController, animated: true)
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Xcode의 오른쪽 상단 모서리에 있는 + 버튼을 클릭하여 라이브러리를 엽니다. UIHostingController를 검색하여 스토리보드에 끌어다 놓습니다.
Segue 컨트롤을 만들려면 기본 ViewController의 UIButton에서 방금 추가한 UIHostingController로 드래그(ctrl 키를 누른 상태에서 요소 드래그)합니다.
Storyboard와 코드를 동시에 볼 수 있는 Assistant 편집기를 사용하여 Storyboard 화살표(두 개의 ViewController 연결)에서 ViewController 클래스로 제어 드래그하여 Segue Outlet을 만듭니다. 방금 @IBSegueAction을 만들고 이름을 segueToSwiftUIView로 지정했습니다.
ViewController.swift파일로 이동해서 @IBSegueAction 생성으로 추가된 placeholder를 수정하겠습니다. 우리는 UIKit 기반 프로젝트에 SwiftUI가 연결될 수 있도록 SwiftUIView를 루트 보기로 사용하는 UIHostingController를 return합니다.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
// 3. Create a Segue Outlet
@IBSegueAction func segueToSwiftUIView(_ coder: NSCoder) -> UIViewController? {
// 4. Implement the @IBSegueAction
return UIHostingController(coder: coder, rootView: SwiftUIView())
}
}
지금까지 SwiftUI View를 UIKit 기반 앱에 연결하는 두 가지 다른 방법을 알아봤습니다.
안녕하세요, 혹시 UIHostingController에 동시에 여러개의 SwiftUI 뷰가 연결되어있어야하는 경우는 어떻게하나요?