2010-11-29 34 views
8

NSTextView'da "vurgulama" özelliği yazmaya çalışıyorum. Şu anda her şey harika çalışıyor. Bir metin aralığı seçersiniz ve bu metnin arkaplan rengi sarıya dönüşür. Ancak, hala seçiliyken, arka plan seçilen metnin standart mavidir. Belirli durumlarda standart seçim göstergesi rengini nasıl göstermezim?NSTextView'da metin seçim rengini değiştirme

Teşekkürler!

cevap

16

-[NSTextView setSelectedTextAttributes:...]'u kullanın. Örneğin

: Eğer (Ekleme noktasını gizleme kısa) hiç bir şekilde gösterilen seçeneğe istemiyorsanız

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

Sadece boş bir sözlük geçebilir.

Seçim değişikliklerini izlemek ve temporary attributes kullanarak "seçimi" uygulamak için başka bir seçenektir. Yazım ve dilbilgisi hatalarını göstermek ve sonuçları bulmak için geçici niteliklerin kullanıldığını unutmayın; Bu nedenle, NSTextView'ın bu özelliklerini korumayı önemsiyorsanız, yalnızca geçici nitelikler ekleyip kaldırarak değiştirin, değiştirmeyin.

Bunun bir örneği, (a NSTextView alt sınıfta) 'dir:

- (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]; 
} 
+0

clearColor arka plan rengini ayarlayarak, vurgulamak tüm seçim tamamlandıktan sonra çalışır. Seçim devam ederken bu özellikleri nasıl uygularım? – DexterW

+0

Bildirimler, fare düğmesi serbest bırakılıncaya kadar teslim edilmez (yani, artık "stillSelecting" değerine sahip değilsiniz). Devam eden seçimleri işlemek istiyorsanız, NSTextView alt sınıfını (bazı örnek kodları sağlamak için cevabımı düzenledim) almanız gerekir. –