19

私は NSTextView を使用する Cocoa テキスト エディターに取り組んでいます。テキストの特定の部分の色を変更することはできますか?

4

5 に答える 5

32

( ) のNSTextStorageオブジェクトのデリゲートとしてコントローラーを追加し、デリゲート メソッドを実装する必要があります。これは、テキストが変更されるたびに呼び出されます。NSTextView[textView textStorage]‑textStorageDidProcessEditing:

デリゲート メソッドでは、 のメソッドをNSTextStorage使用してテキスト ビューから現在のオブジェクトを取得する必要があります。のサブクラスであり、ビューの属性付きコンテンツを含みます。-textStorageNSTextViewNSTextStorageNSAttributedString

次に、コードで文字列を解析し、関心のあるテキスト範囲に色を適用する必要があります。次のようなものを使用して範囲に色を適用すると、文字列全体に黄色が適用されます。

//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テキストを解析するときに使用する便利なクラスです。

この方法は、決して構文の色付けを処理する最も効率的な方法ではないことに注意してください。編集しているドキュメントが非常に大きい場合は、解析を別のスレッドにオフロードするか、テキストのどのセクションを再解析するかを賢く検討する必要があります。

于 2010-02-08T09:54:26.710 に答える
4

Syntax Highliging に関するCocoaDev ページを読むことから始めることをお勧めします。多くの人がさまざまな目標の解決策を持ってきました。

ソース コードの構文の強調表示を実行する場合は、Uli KustererのUKSyntaxColoredTextDocumentを参照することをお勧めします。

于 2010-02-08T08:57:13.417 に答える
2

もちろん。を与えることができ、属性付き文字列でできることNSTextViewNSAttributedStringいくつかは、文字列の特定の部分範囲に色を適用することです。

または、Google で検索すると、多くの人が以前にこれを行ったことがあることがわかります。

おそらくOkudaKitの使用をお勧めします。

于 2010-02-07T21:36:53.840 に答える