NSTextViewにバインドされた属性付き文字列があります。文字列が編集されるたびに(KVOを使用して)呼び出されるメソッドを使用して、正規表現の一致に基づいて文字列に背景色の属性を追加しています。これを行うには、-initWithAttributedString:
then -beginEditing
、、、を使用して新しい可変属性文字列を作成します。必要なすべての背景色属性を追加したら、文字列のセッターを呼び出します。問題は、文字列に追加された属性が実際にある場合、元に戻るを強制終了し、カーソルを文字列の最後に移動することです。-addAttribute:
-endEditing
[self setTextViewString:mutableAttributedString]
どうすれば元に戻すを維持できますか?セッターの両側にあるtextViewのselectedRangesメソッドとsetSelectedRanges:メソッドを呼び出してカーソル位置を維持しましたが、これはまだ少しハックのようです。
textviewをmutableattributedstringに直接バインドすることはできませんでしたが、編集を台無しにしないように、バインドされた文字列を変更するより直接的な方法があるはずです。
PS、属性の追加は、KVOメソッドが呼び出し-performSelectorOnMainThread:
て終了した後に行われます。これが、追加された属性を表示する唯一の方法でした。