微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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是解析文本时使用的一个有用的类。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐