はじめに
みなさんはSwiftUIを使用しているでしょうか。
私はまだそこまでちゃんとキャッチアップできておらず、とりあえずはUIKitメインで一部のビューのみSwiftUIにリプレイスしていけば良いかと呑気に考えています。
本記事では、UIViewControllerでSwiftUIのビューを表示するために利用できるUIHostingControllerについて説明しています。
UIHostingController
UIHostingControllerは、SwiftUIのView階層を管理するUIKitのViewControllerです。
SwiftUIのビューをUIKitのビュー階層に統合したい場合は、以下のようにUIHostingControllerオブジェクトを作成し、rooViewプロパティにSwiftUIビューを指定します。
let hc = UIHostingController(rootView: SwiftUIView())
あとはViewControllerと同じように取り扱うことができます。
モーダルで画面を表示したい場合は、
present(hc)
で良いですし、子ビューコントローラーとして扱いたい場合は、
addChild(hc)
view.addsubView(hc.view)
hc.didMove(toParent: self)
というように、UIViewControllerと同じように扱います。
最後に
UIHostingControllerのおかげで、UIKitで実装されたプロジェクトに部分的にSwiftUIを導入することを可能にしてくれています🙌
しばらくは画面遷移などはUIViewControllerに任せて、SwiftUIはビューを構成することだけに利用していきたいなと思います。
参考文献
この記事は、以下の情報を参考にしました。