2012-09-23 17 views
6

OK, quindi questo è quello che voglio: (? Come NSRange)Get & Evidenziare parola corrente in un NSTextView

  • Abbiamo un NSTextView
  • Get parola "corrente", alla posizione del cursore (come questo potrebbe essere determinato)
  • evidenziarlo (cambiare i suoi attributi)

non sono sicuro di come fare per questo: voglio dire la mia preoccupazione principale è sempre attuale posizione nel NSTextView e ottenere la parola al punto (so che alcuni plugin di testo sostengono che, ma non sono sicuro come del NSTextView implementazione originale ...)

C'è qualche funzione built-in per questo? O, se no, qualche idea?


UPDATE:posizione del cursore (RISOLTO)

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

Ora, ancora cercando di trovare una soluzione per un specificando la parola sottostante ...

+1

Sono davvero curioso di sapere perchè questa domanda ha un '-1'. Non essere in grado di comprendere/rispondere alla propria domanda non è una ragione sufficiente per ridiscutere. O almeno un commento sarebbe più costruttivo ... eh? –

+1

Non so perché, neanche. Ho intenzione di bilanciare. – Wevah

+1

Questa è in realtà una buona domanda. +1. –

risposta

7

Ecco un modo:

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, non ho fatto l'evidenziazione. Aggiunta ... – Wevah

+0

Grazie mille. **Bella risposta**. (Mi sono preso la libertà di correggere uno o due pezzetti che non funzionavano). Ora un altro per voi: qualche idea su come collegare un selettore al 'NSTextView' attivato quando cambia la posizione del cursore? (con la tastiera o il mouse). Dovrei usare una specie di osservatore? –

+0

Stavo per postare che non l'ho provato, ma poi mi sono distratto. – Wevah

1

semplice algoritmo per trovare i confini della parola (supponendo che le parole siano spaziate):

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

Grazie mille. :-) –

+0

@ Dr.Kameleon nessun problema :) –

Problemi correlati