【问题标题】:TextEditor disable editingTextEditor 禁用编辑
【发布时间】:2022-01-27 00:21:42
【问题描述】:

概述:

  • 我有一个 TextEditor,它使用一个常量绑定,所以这个值不能改变。

目标:

  • 我希望文本编辑器不显示键盘,但仍允许用户复制文本。

问题:

  • 如何实现文字复制但不显示键盘?
  • 我更喜欢使用 SwiftUI 还是只能使用 UIViewRepresentable

代码:

import SwiftUI

struct TextView: View {
    
    let text: String
    
    var body: some View {
        TextEditor(text: .constant(text))
    }
}

struct TextView_Previews: PreviewProvider {
    static var previews: some View {
        
        let text = "this is some text"
        
        TextView(text: text)
    }
}

【问题讨论】:

    标签: ios swift swiftui


    【解决方案1】:

    iOS 15

    yourField
      .textSelection(.enabled)
    

    iOS 14 及更低版本

    我认为现在没有很好的 swiftui 支持,考虑到它是一个常量,我可能只是手动添加复制行为:

    struct CopyableLabel : View {
        let text: String = "here's a constant"
    
        var body: some View {
            Text(text)
                .contextMenu {
                    Button(action: {
                        UIPasteboard.general.string = text
                    }) {
                        Text("Copy")
                    }
                }
        }
    }
    

    如果您希望用户能够手动选择部分,我认为最有效的方法是使用 uikit,或者滚动一些更复杂的东西

    【讨论】:

    • 我认为这是个好主意,实际上我只需要复制。我从没想过contextMenu
    • 非常感谢!!我将 Text 包裹在 ScrollView 中以使其可滚动。
    • 不错!我希望我们可以编辑上下文以使其看起来像标准的黑色控件,但我认为这是新浪潮,所以可能对用户适应有好处.. 很高兴它起作用了 :)
    • 我认为上下文菜单更多地被用作为普通按钮提供辅助选项的一种方式,因此它的大小和外观。我认为它类似于在 Mac 上单击鼠标右键的等效(功能)。我认为 SwiftUI 中不存在 UIMenuController 之类的东西。
    【解决方案2】:

    更好的方法是使用“textSelection”修改

    Text("Hello, world!")
        .textSelection(.enabled)
        .padding()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      相关资源
      最近更新 更多