SwiftUI允许选中文本textSelection
SwiftUI允许选中文本textSelection

SwiftUI允许选中文本textSelection

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: "这段文字可以像网页一样选中复制")
   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注