何が間違っているのかわかりません。私は NSTextView を持っており、その textStorage 属性のデリゲートとして登録されています。受け取っ-textStorageDidProcessEditing:notification:
たら、テキスト内の文字の範囲に属性を適用しようとしています。それは確かにキャラクターに「何か」をしますが、私が期待するものではありません...彼らはただ消えます!
高度に抽出されたコード例。これにより、テキスト フィールドの 2 番目の文字が常に赤になります。
-(void)textStorageDidProcessEditing:(NSNotification *)notification {
NSTextStorage *textStorage = [textView textStorage];
if ([[textStorage string] length] > 1) {
NSColor *color = [NSColor redColor];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:color, NSForegroundColorAttributeName, nil];
[textStorage setAttributes:attributes range:NSMakeRange(1, 1)];
}
}
代わりに、シーケンス「abcdefg」を入力すると「a」が表示され、次に「b」を押すと何も起こらないように見えますが、「cdefg」を押すと通常どおり入力が行われ、最終結果は「acdefg」になります... 「b」がありません!
バックスペースを押し始めると、「b」が実際にそこにあるが、描画されていないかのように、バックスペースを7回押す必要があります(「b」を削除するとカーソルが停止し、次のバックスペースで「a」を削除します期待される)。
ビューが描画される前-setAttributes:range:
に同じ方法を使用して、ビュー内のデフォルトのテキストに属性を適用すると、期待どおりに動作します。
手がかりはありますか?NSTextStorageDelegate
:)のかなり通常の使用のようです。
-setNeedsDisplay
テキストフィールドを呼び出してみましたが、役に立ちませんでした。