在UIkit时代,我们可以通过UITextView的方式构建可选择和复制内容的文本。进入SwiftUI时代我们该如何解决这个问题呢
没有什么,我们就自己动手造
UIViewRepresentable
SwiftUI 给我们提供视图包装器(UIViewRepresentable),可以将UIKit控件包装成SwiftUI世界的原生控件。下面是UIViewRepresentable的介绍
A wrapper for a UIKit view that you use to integrate that view into your SwiftUI view hierarchy.
大白话:
UIKit视图的包装器,用于将其集成到SwiftUI视图层次结构中。
UIViewRepresentable 简介
我们可以使用UIViewRepresentable在SwiftUI世界中创建和管理UIView对象。在您的项目中可以定义一个struct来实现这个协议,并使用其方法来创建,更新和拆除视图。创建和更新过程与SwiftUI视图的行为类似,您可以使用它们使用程序的当前状态信息来配置视图。使用拆解过程从SwiftUI干净地删除视图。例如,您可以使用拆卸过程来通知其他对象该视图消失。
要将视图添加到SwiftUI世界,请创建一个struct实现UIViewRepresentable协议。系统在适当的时间调用可表示实例的方法以创建和更新视图。以下示例显示了视图层次结构中包含自定义MyRepresentedCustomView结构的信息。
struct ContentView: View {
var body: some View {
VStack {
Text("Global Sales")
MyRepresentedCustomView()
}
}
}
系统不会自动将视图内发生的更改传达给SwiftUI界面的其他部分。当您希望您的视图与其他SwiftUI视图进行协调时,必须提供一个Coordinator实例来促进这些交互。例如,您使用target-action来转发目标操作并将消息从您的视图委托给任何SwiftUI视图
好了,下面我们来看看如何实现一个支持选择和复制文本的Text吧!
感谢网友守约七号提的需求
网友反馈需要不弹出键盘,后来研究了一下,实现起来非常简单。只需要
uiView.inputView = UIView()