我正在寻找等效项来控制 SwiftUI 的 TextEditor 中 NSTextView 的 isEditable 和 isSelectable 属性。
在 AppKit 中,我可以使用以下方法轻松使文本视图可编辑或可选择:
textView.isEditable = isEditable
textView.isSelectable = isSelectable
但是,我无法找到如何使用 SwiftUI 中的文本编辑器实现类似的功能。
从 macOS Sonoma 14.3.1 开始,
TextEditor
not 不支持 textSelection
或 selectionDisabled
修饰符。我们需要采取其他手段:
allowsHitTesting(false)
防止用户用鼠标选择文本。focusable(false)
防止用户通过按 tab来聚焦
TextEditor
。Binding.constant
传递给 TextEditor
。
使用 tab 将焦点移出
TextField
。使用 ⌃tab(控制选项卡)将焦点移出 TextEditor
。
import SwiftUI
struct MyView: View {
@State var text = "hello world"
var body: some View {
Form {
TextField("top", text: $text)
LabeledContent("Editable") {
TextEditor(text: $text)
}
LabeledContent("Selectable") {
TextEditor(text: .constant(text))
}
LabeledContent("Unselectable") {
TextEditor(text: $text)
.allowsHitTesting(false)
.focusable(false)
}
TextField("bottom", text: $text)
}
}
}
#Preview {
MyView()
.padding()
}