2012-09-23 17 views
6

OK, vì vậy đây là những gì tôi muốn: (? Như một NSRange)Nhận & Highlight Lời Current trong một NSTextView

  • Chúng tôi có một NSTextView
  • Nhận "hiện tại" văn bản, tại vị trí con trỏ (làm thế nào điều này có thể được xác định)
  • Highlight nó (thay đổi thuộc tính của nó)

tôi không chắc chắn làm thế nào để đi về điều này: tôi có nghĩa là mối quan tâm chính của tôi là nhận được vị trí hiện tại trong vòng NSTextView và nhận được từ tại điểm (Tôi biết một số Plugin văn bản hỗ trợ điều đó, nhưng tôi không chắc chắn về việc triển khai thực hiện NSTextView gốc ...)

Có chức năng tích hợp nào không? Hoặc, nếu không, bất kỳ ý tưởng?


UPDATE:Cursor vị trí (SOLVED)

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

Bây giờ, vẫn đang cố gắng để tìm một giải pháp cho sự xác định từ cơ bản ...

+1

Tôi thực sự tò mò tại sao câu hỏi này có một '-1'. Không thể hiểu/trả lời câu hỏi của một người là không đủ lý do để từ bỏ nó. Hoặc ít nhất một bình luận sẽ mang tính xây dựng hơn ... huh? –

+1

Tôi cũng không biết tại sao. Tôi sẽ cân bằng nó. – Wevah

+1

Đây thực sự là một câu hỏi hay. +1. –

Trả lời

7

Dưới đây là một cách:

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

Ồ, tôi không làm nổi bật. Đang thêm… – Wevah

+0

Cảm ơn rất nhiều. **Câu trả lời chính xác**. (Tôi lấy sự tự do để sửa một hoặc hai bit nhỏ không hoạt động). Bây giờ thêm một cho bạn: bất kỳ ý tưởng làm thế nào tôi có thể treo lên một bộ chọn để 'NSTextView' kích hoạt khi vị trí con trỏ thay đổi? (bằng bàn phím hoặc chuột). Tôi có nên sử dụng một số loại người quan sát? –

+0

Tôi sẽ đăng bài mà tôi đã không kiểm tra nó, nhưng sau đó tôi đã bị phân tâm. – Wevah

1

thuật toán đơn giản để tìm ranh giới của từ (giả sử rằng các từ là không gian-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

Cảm ơn rất nhiều. :-) –

+0

@ Dr.Kameleon không vấn đề gì :) –

Các vấn đề liên quan