我已經通過正確設置NSTextView
的NSTextStorage
委託和更改-textStorageDidProcessEditing
中的文本屬性來實現基本語法高亮。修改NSTextStorage屬性會導致滾動視圖跳轉
基本過程如下:
- (void)textStorageDidProcessEditing:(NSNotification *)notification {
NSTextStorage *storage = [notification object];
[storage beginEditing];
NSString *text = [storage string];
NSRange textRange = NSMakeRange(0, [text length]);
[storage removeAttribute:NSForegroundColorAttributeName range:textRange];
// Some regex matching here ...
[storage addAttribute:NSForegroundColorAttributeName
value:[COSyntax colorForPatternGroup:pattern.groupName]
range:capturedRanges[group]];
[storage endEditing];
}
每當輸入SPACE
字符時調用-removeAttribute:range:
或-addAttribute:value:range
,圍繞NSScrollView
位置的NSTextView
開始跳轉(滾動旋鈕到達附近的某個隨機位置) )
造成這種情況的原因是什麼?
我剛剛有這個問題,我非常感謝這個答案。拯救了我無盡的悲傷。 – 2012-06-21 22:20:53
我在'processEditing'中處理自定義文本存儲。移動到委託方法解決了我的問題。謝謝! – 2013-12-31 04:10:35
這似乎是正確的答案,應該是被接受的答案。關閉IB中的非連續佈局可以解決問題。其他建議的修正,例如在'textStorageDidProcessEditing:'內部使用'didChangeText',或不使用'beginEditing' /'endEditing',不是一個好主意,不管它們是否避免了這個特定的錯誤。我剛剛在蘋果的bug記者提交了這個bug,#24539235。請提交bug! – bhaller 2016-02-06 13:41:27