textSelection 是 SwiftUI 中的一个视图修饰符,用来控制文本是否可以被用户选中并复制。
默认情况下,SwiftUI 的 Text 是不可选中的。
如果希望允许用户选择文本,需要显式启用:
.textSelection(.enabled)
示例:
Text("Hello SwiftUI")
.textSelection(.enabled)
运行后用户可以:长按文本并选择部分内容,行为和系统文本(如 Safari、Notes)类似。
基本用法
textSelection 有两个主要取值:
启用选择:
.textSelection(.enabled)
禁用选择:
.textSelection(.disabled)
例如:
VStack {
Text("可以复制")
.textSelection(.enabled)
Text("不允许复制")
.textSelection(.disabled)
}
textSelection也可以作用在容器视图上:
VStack {
Text("Line 1")
Text("Line 2")
Text("Line 3")
}
.textSelection(.enabled)

在 iOS 上,长按文本后滑动手指即可选中,松开后显示 Copy 菜单。在 macOS 上,点击并拖拽即可选中文本,松开后显示 Copy 菜单。
高亮背景选中
如果想要实现高亮背景选中效果,可以使用TextEditor(只读模式模拟)或 UIViewRepresentable 包装 UITextView:
struct SelectableText: UIViewRepresentable {
let text: String
func makeUIView(context: Context) -> UITextView {
let textView = UITextView()
textView.text = text
textView.isEditable = false // 只读,不能编辑
textView.isSelectable = true // 可以选中
textView.backgroundColor = .clear
return textView
}
func updateUIView(_ uiView: UITextView, context: Context) {
uiView.text = text
}
}
// 使用
SelectableText(text: "这段文字可以像网页一样选中复制")

