要在 SwiftUI 中使用 UIKit 视图,需要使用 UIViewRepresentable 协议包装该视图。只需要在 SwiftUI 中创建一个采用该协议的 struct ,即可管理 UIView 对象。
以下是 UIKit 视图的自定义包装器的骨架,该协议只需实现两个方法:
struct CustomView: UIViewRepresentable {
// makeUIView 方法:负责创建和初始化视图对象
func makeUIView(context: Context) -> some UIView {
// Return the UIView object
}
// updateUIView 方法:负责更新 UIKit 视图的状态
func updateUIView(_ uiView: some UIView, context: Context) {
// Update the view
}
}
在实际场景中,会用具体的 UIKit 视图替换 UIView。比如我们想要为 UITextView 创建自定义包装器,可以编写如下代码:
struct TextView: UIViewRepresentable {
// 在 makeUIView 方法中,返回一个 UITextView 实例。这就是如何包装 UIKit 视图并使其可用于 SwiftUI 的方法
func makeUIView(context: Context) -> UITextView {
return UITextView()
}
func updateUIView(_ uiView: UITextView, context: Context) {
// Update the view
}
}
// 之后要在 SwiftUI 视图中使用 TextView ,就可以像对待任何普通视图一样,直接声明创建它
struct ContentView: View {
var body: some View {
TextView()
}
}