1

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

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

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

4

1 回答 1

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]; 
              }
          }];
于 2012-04-27T18:55:58.680 回答