2012-09-23 36 views
6

好了,这就是我想要的:(?作为NSRange获取并突出显示当前字在NSTextView

  • 我们有一个NSTextView
  • 获取“当前”字,在光标位置(如何可以这样来确定)
  • 选中它(更改其属性)

我不知道如何去了解这一点:?我的意思是我的主要关注的是让内NSTextView并获取当前位置在点字(我知道一些文本的插件支持,但我不知道作为原始NSTextView执行...)

是否有任何内置的功能是什么?或者,如果没有,有什么想法?


UPDATE:光标位置(解决)

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

现在,仍然试图找到一个指定的基本字一个解决办法...

+1

我真的很好奇,为什么这个问题得到了“-1”。不能理解/回答某个人的问题不足以成为降低它的原因。或者至少有一条评论会更有建设性......嗯? –

+1

我不知道为什么,要么。我要平衡它。 – Wevah

+1

这实际上是一个很好的问题。 +1。 – 2012-09-23 18:20:33

回答

7

这里有一种方法:

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

哦,我没有做突出显示。正在追加... – Wevah

+0

非常感谢。 **很好的答案**。 (我冒昧地纠正了一两个不起作用的小片段)。现在又一个给你:任何想法如何将选择器连接到当光标位置改变时触发的'NSTextView'? (使用键盘或鼠标)。我应该使用某种观察者吗? –

+0

我打算发布我没有测试它,但后来我分心。 – Wevah

1

简单的算法来找到这个词的界限(假设这个词是空间分辩的):

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

非常感谢。 :-) –

+0

@ Dr.Kameleon没问题:) – 2012-09-23 19:30:08