デリゲートとして機能するNSTextView
サブクラスがあります。NSTextStorage
私は2つのことをしようとしています:
- いくつかの方法でテキストを強調表示する
- テキストを評価し、回答をテキストビューに追加します。
私はこれを 2 つの異なるメソッドで実行しています。どちらも- (void)textStorageWillProcessEditing:(NSNotification *)notification
デリゲート コールバックによって呼び出されます。
構文の強調表示は問題なく実行できますが、回答を追加すると、挿入ポイントが行末にジャンプしてしまい、その理由がよくわかりません。私の評価方法は次のようになります。
NSString *result = ..;
NSRange lineRange = [[textStorage string] lineRangeForRange:[self selectedRange]];
NSString *line = [[textStorage string] substringWithRange:lineRange];
line = [self appendResult:result toLine:line]; // appends the answer
[textStorage replaceCharactersInRange:lineRange withString:line];
そうすることで結果がうまく追加されますが、問題は、前述のように、挿入ポイントが最後にジャンプすることです。
私はもう試した:
- 上記の呼び出しを と でラップし
[textStorage beginEditing]
ます-endEditing
。 - テキストストレージを変更する前に選択範囲(つまり、挿入ポイント)を保存して、後でリセットできるようにしますが、サイコロはありません。
私はこれを正しく行っていますか?私はこれを最もハックな方法でやろうとしていますが、これが私の解析/強調表示を行うのに理想的な場所であるかどうかもわかりません. ドキュメントは私にこれを信じさせますが、おそらくそれは間違っています。