2012-09-23 7 views
6

bien, así que esto es lo que quiero: (? Como un NSRange)Obtener y Resaltar palabra actual en un NSTextView

  • Tenemos un NSTextView
  • Get palabra "actual", en la posición del cursor (cómo este podría ser determinado)
  • resaltarlo (cambia sus atributos)

no estoy seguro de cómo hacer esto:? me refiero a mi principal preocupación es conseguir la posición actual dentro de NSTextView y conseguir la palabra en el punto (sé que algunos plugins de texto que apoyan, pero no estoy seguro como el de la implementación original NSTextView ...)

¿Hay alguna función incorporada para eso? O, si no, alguna idea?


ACTUALIZACIÓN: La posición del cursor (SOLUCIONADO)

NSInteger insertionPoint = [[[myTextView selectedRanges] objectAtIndex:0] rangeValue].location; 

Ahora, todavía tratando de encontrar una solución para un especificando la palabra subyacente ...

+1

Estoy muy curioso por qué esta pregunta tiene un '-1'. No ser capaz de entender/responder a la pregunta de uno no es razón suficiente para revocarla. O al menos un comentario sería más constructivo ... ¿eh? –

+1

No sé por qué, tampoco. Voy a equilibrarlo. – Wevah

+1

Esta es realmente una buena pregunta. +1. –

Respuesta

7

Aquí hay una manera:

NSUInteger insertionPoint = [myTextView selectedRange].location; 
NSString *string = [myTextView string]; 

[string enumerateSubstringsInRange:(NSRange){ 0, [string length] } options:NSStringEnumerationByWords usingBlock:^(NSString *word, NSRange wordRange, NSRange enclosingRange, BOOL *stop) { 
if (NSLocationInRange(insertionPoint, wordRange)) { 
    NSTextStorage *textStorage = [myTextView textStorage]; 
    NSDictionary *attributes = @{ NSForegroundColorAttributeName: [NSColor redColor] }; // e.g. 
    [textStorage addAttributes:attributes range:wordRange]; 
    *stop = YES; 
}}]; 
+1

Oh, yo no hice el resaltado. Anexando ... – Wevah

+0

Muchas gracias. **Gran respuesta**. (Me tomé la libertad de corregir una o dos pequeñas partes que no funcionaban). Ahora uno más para ti: ¿alguna idea de cómo podría conectar un selector al 'NSTextView' que se activa cuando cambia la posición del cursor? (ya sea con el teclado o el mouse). ¿Debo usar algún tipo de observador? –

+0

Iba a publicar que no lo probé, pero luego me distraí. – Wevah

1

algoritmo simple para encontrar los límites de la palabra (suponiendo que las palabras son el espacio-spearated):

NSInteger prev = insertionPoint; 
NSInteger next = insertionPoint; 

while([[[myTextView textStorage] string] characterAtIndex:prev] != ' ') 
    prev--; 

prev++; 

while([[[myTextView textStorage] string] characterAtIndex:next] != ' ') 
    next++; 

next--; 

NSRange currentWordRange = NSMakeRange(prev, next - prev + 1); 
NSString *currentWord = [[[myTextView textStorage] string] substringWithRange:currentWordRange]; 
+0

Muchas gracias. :-) –

+0

@ Dr.Kameleon no hay problema :) –

Cuestiones relacionadas