gpt4 book ai didi

objective-c - 修改 NSTextStorage 属性导致 ScrollView 跳转

转载 作者:太空狗 更新时间:2023-10-30 03:39:29 27 4
gpt4 key购买 nike

我通过正确设置 NSTextViewNSTextStorage 委托(delegate)并更改 -textStorageDidProcessEditing 中的文本属性,实现了基本语法突出显示。

基本流程如下

- (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];
}

每当 -removeAttribute:range:-addAttribute:value:range 在输入 SPACE 字符时被调用, NSTextView 周围的 NSScrollView 位置开始跳动(滚动旋钮转到 附近的某个随机位置)

这是什么原因造成的?

最佳答案

我终于从我的观察中发现,跳跃不仅在按下空格键时发生,而且在其他键(如退格键)上也会发生,而这恰好在这两种情况下发生。
- 非连续布局已打开
- 可见区域之前文本的任何修改,甚至是属性,都在 -textStorageDidProcessEditing:
中进行看起来这是非连续布局功能中的错误!如果有专家能证实就好了。
它似乎与调用 -beginEditing-endEditing 无关。

关于objective-c - 修改 NSTextStorage 属性导致 ScrollView 跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323830/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com