cocoa - NSTextView高亮显示

标签 cocoa nstextview

在我为 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/

相关文章:

macos - 基于 NSSplitViewController 的应用程序几乎永远不会以正确的大小启动

cocoa - 减少我的应用程序破解(cocoafob)

objective-c - 任何一对多对多谓词

cocoa - 如何在 NSTableView 中添加高度可变的 NSTextView

cocoa - 如何在 NStextview 中使选择内容变为粗体?

objective-c - 使用 CoreGraphics 绘制圆角线性渐变(或扩展径向渐变)

objective-c - 如何打印出方法名称和行号并有条件地禁用 NSLog?

cocoa - NSTextView、appendString 和 NSConcreteTextStorage 的错误

cocoa - 从 NSTextView 中提取第一个非空白行的最有效方法?

objective-c - Cocoa,如何在 NSTextView 中选择文本