개인공부

UIHostingController _ 페이지 컨트롤러 호스팅

h_luz 2024. 7. 6. 19:48

 

SwiftUI랑 UIKit 을 동시에 사용해서 호스팅하는 것을 공부했다.

이번 프로젝트를 하면서 애니메이션이나 디자인 적으로 UIKit으로는 구현하기 어려운 부분을 SwiftUI로 구현했는데

너무 큰 매력을 느껴서 앞으로 공부해보려고 한다 ! (TMI...)

 

UIHostingController

: SwiftUI 뷰 계층을 관리하는 UIKit 뷰 컨트롤러

https://developer.apple.com/documentation/swiftui/uihostingcontroller

 

UIHostingController | Apple Developer Documentation

A UIKit view controller that manages a SwiftUI view hierarchy.

developer.apple.com

 

import SwiftUI

struct PageControlButton: View {
	//PageControlButton SwiftUI로 구현
}

 

 

var pageControlButton: UIHostingController<PageControlButton>!

override func viewDidLoad() {
super.viewDidLoad()

setupPVC()
setupPageControlButton()
}

func setupPageControlButton() {
    let pageControlButtonView = PageControlButton(onIndexChanged: { [weak self] index in
        self?.navigateToPage(index: index)
    })
    pageControlButton = UIHostingController(rootView: pageControlButtonView)
    addChild(pageControlButton)
    view.addSubview(pageControlButton.view)
    pageControlButton.didMove(toParent: self)

    pageControlButton.view.backgroundColor = .clear

    pageControlButton.view.snp.makeConstraints {
        $0.leading.trailing.equalToSuperview().inset(90)
        $0.bottom.equalTo(view.safeAreaLayoutGuide).inset(15)
        $0.height.equalTo(70)
    }
}

이 페이지 컨트롤러 버튼을 ViewController들을 전환하는데 사용해서 onIndexChanged같은 것들이 있는데,

형식은 그냥 UIHostingController를 사용하여 SwiftUI 뷰인 PageControlButton을 UIKit 뷰 계층에 포함시켜주는 방식
즉, UIHostingController는 SwiftUI 뷰를 UIKit 뷰 계층에 통합할 수 있도록 도와주는 컨테이너이다.