如何在SwiftUI中更改NSTextView中的选择颜色?

txu3uszq  于 2023-06-21  发布在  Swift
关注(0)|答案(1)|浏览(96)

我正在使用SwiftUI和NSViewRepresentable创建一个可以显示可选文本的自定义NSTextView。下面是我的代码:

struct SelectableText: NSViewRepresentable {
    let text: String
    let font: NSFont?
    
    init(text: String, font: NSFont? = nil) {
        self.text = text
        self.font = font
    }
    
    func makeNSView(context: Context) -> NSTextField {
        let textField = NSTextField(wrappingLabelWithString: text)
        textField.isBezeled = false
        textField.isEditable = false
        textField.isSelectable = true
        textField.backgroundColor = .clear
        textField.font = font ?? NSFont.systemFont(ofSize: NSFont.systemFontSize)
        return textField
    }
    
    func updateNSView(_ nsView: NSTextField, context: Context) {
        nsView.stringValue = text
        nsView.font = font ?? NSFont.systemFont(ofSize: NSFont.systemFontSize)
    }
}

我想在NSTextView中更改选择高亮显示的颜色。我尝试设置selectedTextAttributes属性,但它没有按预期工作。NSTextView未接收正确处理文本选择所需的事件。
如何在SwiftUI中更改NSTextView中的选择颜色?任何帮助将不胜感激。

0lvr5msh

0lvr5msh1#

如果你是指NSTextView,这里有一个可能的方法:

struct SelectableTextView: NSViewRepresentable {
    let text: String
    let font: NSFont?
    
    init(text: String, font: NSFont? = nil) {
        self.text = text
        self.font = font
    }
    
    func makeNSView(context: Context) -> NSTextView {
        let textView = NSTextView(frame: .zero)
        textView.isEditable = false
        textView.isSelectable = true
        textView.backgroundColor = .clear
        textView.font = font ?? NSFont.systemFont(ofSize: NSFont.systemFontSize)
        textView.string = text
        
        textView.selectedTextAttributes = [
            NSAttributedString.Key.foregroundColor : NSColor.systemGreen, // Change the text color
            NSAttributedString.Key.backgroundColor: NSColor.systemRed// Change the background color
        ]
        return textView
    }
    
    func updateNSView(_ nsView: NSTextView, context: Context) {
        nsView.string = text
        nsView.font = font ?? NSFont.systemFont(ofSize: NSFont.systemFontSize)
    }
}

相关问题