objective-c – NSTextView语法高亮

我正在使用一个使用NSTextView的Cocoa文本编辑器。是否可以改变文字某些部分的颜色?

解决方法

您应该将控制器添加为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是解析文本时使用的一个有用的类。

请注意,这种方法绝不是处理语法着色的最有效方法。如果您正在编辑的文档非常大,您很有可能会考虑将解析分解到单独的线程和/或巧妙地解释文本的哪些部分被重新编译。

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...