UIKit의 UIView 서브클래싱 한 클래스를 SwiftUI View에서 가져다 사용하는 방법입니다.
이전 블러그에 UIViewController 를 SwiftUI 에서 가져다 사용할때 UIViewControllerRepresentable 상속받아서
사용했다면 UIView 가져다 사용할 때는 UIViewRepresentable 상속받아서 사용하면 됩니다.
방식은 동일합니다.
IWKWebView 클래스는 UIView 를 상속받은 클래스로 SwiftUI 에서 가져다 사용할 경우 아래와 같이 이용하면 됩니다.
import SwiftUI
struct BaseWebView: UIViewRepresentable {
var urlToLoad: String
func makeUIView(context: Context) -> some IWKWebView {
let baseWebview = IWKWebView()
baseWebview.webViewLoad(urlString: urlToLoad, httpMethod: .GET)
return baseWebview
}
func updateUIView(_ uiView: UIViewType, context: Context) {
}
}
struct BaseWebView_Previews: PreviewProvider {
static var previews: some View {
BaseWebView(urlToLoad: "https://naver.com")
}
}
대충 가져다 사용하는 방식은 동일합니다.
import SwiftUI
struct NetworkListContentView: View {
var body: some View {
List{
NavigationLink {
ZStack {
BaseWebView(urlToLoad: "https://www.naver.com")
}
.edgesIgnoringSafeArea(.bottom)
} label: {
MainRowTitle(name: "WKWebView")
}
}
.listStyle(.automatic)
}
}
struct NetworkListContentView_Previews: PreviewProvider {
static var previews: some View {
NetworkListContentView()
}
}
반대로 SwiftUI View 를 UIViewController의 View에 addSubview 하는 경우 아래와 같이 addSubview 하면 됩니다.
import UIKit
import SwiftUI
class TestViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func testButton(_ sender: Any) {
let testView = UIHostingController(rootView: TestView()).view!
testView.frame = self.view.frame
testView.backgroundColor = UIColor.red
self.view.addSubview(testView)
}
}
'SwiftUI' 카테고리의 다른 글
[SwiftUI] App to App Scheme 처리 이벤트 (0) | 2024.04.17 |
---|---|
[SwiftUI] View 백그라운드/포그라운드 이벤트 체크 (0) | 2024.04.17 |
[SwiftUI] AppDelegate 추가해서 Push 설정하기 (0) | 2024.04.17 |
[SwiftUI] TextField 화면 터치로 키보드 내리기(전역설정) (0) | 2024.04.17 |
[SwiftUI] UIViewController <-> SwiftUI View 호출방법 (0) | 2024.04.12 |