NSTextView
의 NSTextStorage
대리자를 올바르게 설정하고 -textStorageDidProcessEditing
의 텍스트 특성을 변경하여 기본 구문 강조를 구현했습니다. SPACE
문자를 입력 할 때 -removeAttribute:range:
또는 -addAttribute:value:range
가 호출 될 때마다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];
}
을 다음과 같이
기본 프로세스는, NSScrollView
위치를 둘러싼 NSTextView
들 (스크롤 놉 가까운 어떤 임의의 위치로 이동 움직이지 시작)
이 문제의 원인은 무엇입니까?
방금이 문제가 발생했으며이 답변에 대해 매우 감사드립니다. 슬픔의 끝없는 나를 구 했어요. –
커스텀 텍스트 저장에서'processEditing'으로 처리하고있었습니다. 그 대리자 메서드로 이동 내 문제가 해결되었습니다. 감사! –
이것은 정답 인 것으로 보이며 허용되는 대답이어야합니다. IB에서 비 인접 레이아웃을 끄면 문제가 해결됩니다. 'didChangeText'를 대신 사용하거나,'textStorageDidProcessEditing :'내부에서'beginEditing' /'endEditing'을 사용하지 않는 것과 같은 다른 수정안은이 특정 버그를 피하든 안하든 좋은 생각이 아닙니다. 방금 Apple 버그 게시자에게이 버그를 제출했습니다. # 24539235 버그를 신고하십시오! – bhaller