我正在尝试实现一个语法着色文本编辑器,它还可以为您在新行的开头插入空格,或者用文本附件替换文本。
在之前的实现遇到撤消问题后再次仔细阅读文档后,似乎推荐的瓶颈是 NSTextStorageDelegate 的 textStorage(_,willProcessEditing:,range:,changeInLength:) 方法(其中指出Delegates can change the characters or attributes.,而didProcessEditing说我只能更改属性)。这很好用,除了每当我实际更改属性或文本时,文本插入标记都会移动到我修改的任何文本范围的末尾(因此,如果我更改整行的样式,光标将移到行的末尾)。
有谁知道我错过了哪些额外的电话告诉 NSTextStorage/NSTextView 不要搞砸插入标记?此外,一旦我插入文本,我可能不得不告诉它移动插入标记以说明我插入的文本。
注意:我已经看到修改 NSTextStorage 会导致插入点移动到行尾,但是假设我正在继承 NSTextStorage,所以我不能在那里使用解决方案(并且宁愿不继承 NSTextStorage,因为它是一个半-abstract 子类,如果我将其子类化,我将失去 Apple 类的某些行为)。