13

NSTextViewに「ハイライト」機能を書き込もうとしています。現在、すべてがうまく機能しています。テキストの範囲を選択すると、そのテキストの背景色が黄色に変わります。ただし、選択されている間は、背景は選択されたテキストの標準の青になります。標準の選択インジケーターの色が特定の場合に表示されないようにするにはどうすればよいですか?

ありがとう!

4

1 に答える 1

21

を使用し-[NSTextView setSelectedTextAttributes:...]ます。

例えば:

[textView setSelectedTextAttributes:
     [NSDictionary dictionaryWithObjectsAndKeys:
      [NSColor blackColor], NSBackgroundColorAttributeName,
      [NSColor whiteColor], NSForegroundColorAttributeName,
      nil]];

選択をまったく示さない場合(挿入ポイントを非表示にする以外)は、空の辞書を渡すだけです。

もう1つのオプションは、選択の変更を監視し、一時的な属性を使用して「選択」を適用することです。一時的な属性は、スペルや文法の間違いを示し、結果を見つけるために使用されることに注意してください。したがって、NSTextViewのこれらの機能を保持することに関心がある場合は、一時属性を追加および削除するだけで、それらを置き換えることはしないでください。

この例は(NSTextViewサブクラス内)です。

- (void)setSelectedRanges:(NSArray *)ranges affinity:(NSSelectionAffinity)affinity stillSelecting:(BOOL)stillSelectingFlag;
{
    NSArray *oldRanges = [self selectedRanges];
    for (NSValue *v in oldRanges) {
        NSRange oldRange = [v rangeValue];
        if (oldRange.length > 0)
            [[self layoutManager] removeTemporaryAttribute:NSBackgroundColorAttributeName forCharacterRange:oldRange];
    }

    for (NSValue *v in ranges) {
        NSRange range = [v rangeValue];
        if (range.length > 0)
            [[self layoutManager] addTemporaryAttributes:[NSDictionary dictionaryWithObject:[NSColor blueColor] forKey:NSBackgroundColorAttributeName]
                                       forCharacterRange:range];
    }

    [super setSelectedRanges:ranges affinity:affinity stillSelecting:stillSelectingFlag];
}
于 2010-11-29T02:13:28.730 に答える