解决方法
您应该将控制器添加为NSTextView([textView textStorage])的NSTextStorage对象的委托,然后实现委托方法-textStorageDidProcessEditing:。每当文本更改时都会调用此操作。
在委托方法中,您需要使用NSTextView的-textStorage方法从文本视图获取当前的NSTextStorage对象。 NSTextStorage是NSAttributedString的一个子类,它包含视图的属性内容。
然后,您的代码必须解析该字符串,并将颜色应用于您感兴趣的任何文本范围。您可以使用这样的颜色应用于范围,这将对整个字符串应用黄色:
//get the range of the entire run of text NSRange area = NSMakeRange(0,[textStorage length]); //remove existing coloring [textStorage removeAttribute:NSForegroundColorAttributeName range:area]; //add new coloring [textStorage addAttribute:NSForegroundColorAttributeName value:[NSColor yellowColor] range:area];
你如何解析文本取决于你。 NSScanner是解析文本时使用的一个有用的类。
请注意,这种方法绝不是处理语法着色的最有效方法。如果您正在编辑的文档非常大,您很有可能会考虑将解析分解到单独的线程和/或巧妙地解释文本的哪些部分被重新编译。