1

がありNSTextView、そのNSTextStorageデリゲートとして機能しているため、 と のコールバックを取得textStorageWillProcessEditing:していますtextStorageDidProcessEditing:。現在、コールバックを使用しdidてテキストの属性を変更しています (特定の単語に色を付けています)。

私がやりたいのは、特定の文字ペアの自動一致を追加することです。ユーザーが(を入力すると、私も a を挿入したいのです)が、いつ、どこでこれを行うのが適切なのか正確にはわかりません。

テキスト ストレージ デリゲート プロトコルから、このwillメソッドを使用すると、表示されるテキストを変更できるようになると書かれていますが、それが何を意味するのか、どのようにそれを行うことができるのかはよくわかりません。テキスト システムは非常に大きく、混乱を招きます。

どうすればいいですか?

4

1 に答える 1

2

私のオープンソース プロジェクトでは、一致する文字の挿入を処理するために、サブクラス化NSTextViewとオーバーライドを行いました。insertText:への引数を調べて、insertText:それが処理したいものかどうかを確認し、super を呼び出して通常のテキスト挿入を実行し、insertText:必要に応じて適切な一致する文字列を指定して再度呼び出すことができます。

このようなもの:

- (void)insertText:(id)insertString {
    [super insertText:insertString];

    // if the insert string isn't one character in length, it cannot be a brace character
    if ([insertString length] != 1)
        return;

    unichar firstCharacter = [insertString characterAtIndex:0];

    switch (firstCharacter) {
        case '(':
            [super insertString:@")"];
            break;
        case '[':
            [super insertString:@"]"];
            break;
        case '{':
            [super insertString:@"}"];
            break;
        default:
            return;
    }

    // adjust the selected range since we inserted an extra character
    [self setSelectedRange:NSMakeRange(self.selectedRange.location - 1, 0)];
}
于 2012-06-04T21:22:11.137 に答える