2012-09-23 14 views
6

OK, więc to, co chcę: (? Jako NSRange)Get & Wyróżnij bieżące słowo w NSTextView

  • Mamy NSTextView
  • Get "aktualny" słowo w pozycji kursora (jak może to być określona)
  • zaznacz go (zmienić jego atrybuty)

nie jestem pewien, jak go o to: znaczy moim głównym problemem jest uzyskanie aktualnej pozycji w ciągu NSTextView i coraz słowo w punkcie (Wiem, że niektóre wtyczki Text obsługują to, ale nie jestem pewien co do oryginalnej implementacji NSTextView ...)

Czy jest w tym funkcja wbudowana? A jeśli nie, jakieś pomysły?


UPDATE:pozycja kursora (SOLVED)

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

Teraz, wciąż próbuje znaleźć obejście dla określającego bazowego słowem ...

+1

Jestem naprawdę ciekaw, dlaczego to pytanie got '-1'. Nieumiejętność zrozumienia/odpowiedzi na pytanie nie jest wystarczającym powodem, aby go zlekceważyć. A przynajmniej komentarz byłby bardziej konstruktywny ... huh? –

+1

Ja też nie wiem dlaczego. Zamierzam to zrównoważyć. – Wevah

+1

To właściwie dobre pytanie. +1. –

Odpowiedz

7

Oto jeden ze sposobów:

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

Och, nie zrobiłem podkreślenia. Dołączanie ... – Wevah

+0

Wielkie dzięki. **Świetna odpowiedź**. (Wziąłem wolność poprawiania jednego lub dwóch małych kawałków, które nie działały). Teraz jeszcze jeden dla ciebie: jakikolwiek pomysł, w jaki sposób mógłbym podłączyć selektor do 'NSTextView' wyzwalanego po zmianie pozycji kursora? (za pomocą klawiatury lub myszy). Czy powinienem używać jakiegoś obserwatora? –

+0

Zamierzałem napisać, że nie testowałem tego, ale potem się rozproszyłem. – Wevah

1

Prosty algorytm znaleźć granice słowa (przy założeniu, że słowa są spearowane w przestrzeni):

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

Wielkie dzięki. :-) –

+0

@ Dr.Kameleon bez problemu :) –