在我为 Mac OSX 构建的产品中,我需要支持 10.5、10.6 和 10.7。 我正在使用 NSTextView 作为编辑器。我用它来显示文本和图像。我有一个关于突出显示的要求。这必须像 MS Word 一样工作。在 MS Word 中,您可以选择一个范围并将其更改为黄色。
我使用 setMarkedTextAttributes: 做了同样的事情,但这对于内联图像不起作用。所以我尝试使用 LayoutManager 并设置背景颜色,但它似乎也不起作用。
关于突出显示的附加点是切换,因此如果我选择相同范围的文本并再次突出显示它,它应该不会突出显示。为此,我将所有 NSRange 存储在列表中并检查它是否已突出显示。我觉得我做错了什么。所以我试图获取 NSRect 然后应用颜色可能是?
最佳答案
在 NSAttributedString 中设置该范围的背景颜色:
NSMutableAttributedString *mattrstg = [textView textStorage];
[mattrstg addAttribute:NSBackgroundColorAttributeName value:colorHighlighter range:range];
现有的属性将是您对已突出显示和尚未突出显示的内容的记录。因此,要切换突出显示,您可以执行以下操作
[mattrstg enumerateAttribute:NSBackgroundColorAttributeName
inRange:rangeToChange
options:0 usingBlock:^(id value, NSRange range, BOOL *stop) {
if (value) {
[mattrstg removeAttribute:NSBackgroundColorAttributeName range:range];
} else {
[mattrstg addAttribute:NSBackgroundColorAttributeName value:colorHighlighter range:range];
}
}];
关于cocoa - NSTextView高亮显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10356051/