-
SwiftUI UIKit 72 - SwiftU에서 UIKit 뷰로 데이터 전송SwiftUI 100 레시피/UIKit and SwiftUI Interoperability 2022. 6. 28. 16:34
#1. SwiftUI UIKit 71 - UIKit앱에 SwiftUI 적용하기 에서 수정 및 추가
#2. MovieDetailsController.swift
import Foundation
import UIKit
import SwiftUI
struct MovieDetails: UIViewControllerRepresentable{
let name: String
typealias UIViewControllerType = MovieDetailsController
func makeUIViewController(context: Context) -> MovieDetailsController {
return MovieDetailsController()
}
func updateUIViewController(_ uiViewController: MovieDetailsController, context: Context) {
uiViewController.setMovieName(name)
}
}
class MovieDetailsController: UIViewController{
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.textAlignment = .center
//label.text = "LABEL"
label.font = UIFont(name: "Arial", size: 32)
label.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(label)
label.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
label.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
label.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true
label.heightAnchor.constraint(equalToConstant: 44).isActive = true
return label
}()
func setMovieName(_ name: String){
titleLabel.text = name
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
#3. MovieListScreen 수정
import SwiftUI
struct MovieListScreen: View {
var body: some View {
NavigationView {
List(1...20, id: \.self){ index in
NavigationLink(destination: MovieDetails(name: "Moview \(index)").navigationTitle("Movie \(index)"),
label: {
HStack {
Text("Movie \(index)")
Spacer()
RatingView(rating: .constant(Int.random(in: 1...5)))
}
})
}
.navigationBarTitle("SwiftUI View")
}
}
}
struct MovieListScreen_Previews: PreviewProvider {
static var previews: some View {
MovieListScreen()
}
}
리스트 뷰 클릭시 세부사항으로 이동 'SwiftUI 100 레시피 > UIKit and SwiftUI Interoperability' 카테고리의 다른 글
SwiftUI UIKit 71 - UIKit앱에 SwiftUI 적용하기 (0) 2022.06.28 SwiftUI UIKit 69 - SwiftUI에서 UIActivityIndicatorView 로딩 구현 (0) 2022.06.28