NSTextView突出显示

时间:2012-04-27 18:38:05

标签: cocoa nstextview

在我为Mac OSX构建的产品中,我需要支持10.5,10.6和10.7。 我使用NSTextView作为编辑器。我用它来显示文字和图像。我要求突出显示。这必须与MS Word完全一样。在MS Word中,您可以选择一个范围并将其更改为黄色。

我使用setMarkedTextAttributes做了同样的事情:但这不适用于内嵌图像。所以我尝试使用LayoutManager并设置背景颜色,但它似乎也没有工作。

关于突出显示的另外一点是切换,所以如果我选择相同范围的文本并再次突出显示它,它应该不会突出显示。为此,我将所有NSRange存储在一个列表中,并检查它是否已突出显示。我觉得我做错了什么。所以我试图获得NSRect然后应用颜色可能是?。

1 个答案:

答案 0 :(得分:3)

在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]; 
              }
          }];