由于我的应用程序中某些NSTextView附件的语义,我想知道它们何时从我的文本存储中插入或删除。

我的NSTextView子类实现了shouldChangeTextInRange:replacementString:方法,它允许我轻松查看附件何时被替换(我可以在指定范围内搜索文本存储)。

因为替换字符串只是一个NSString而不是NSAttributedString,所以我无法从这个方法中看到是否插入了附件。文档甚至可以说,如果“仅属性”,则字符串可以是nil。正在编辑。

所以问题是,什么是插入附件时最好的覆盖点?或者也许有用:什么是最佳覆盖点,以查看何时修改属性?

更新:我上面说过,我无法知道是否插入了附件。我向我指出,我可以说“一个”涉及附件,因为该字符串将包含魔法NSAttachmentCharacter。但在编辑完成之前,我不会提供有关附件的具体信息。

有帮助吗?

解决方案

我将查看NSTextStorage委托方法-textStorageDidProcessEditing:,每次对底层文本存储进行更改时都应调用该方法。然后,您可以使用-editedRange,-editedMask和-changeInLength方法来确定文本存储的哪个部分已更改,并在该范围内查找您可能感兴趣的任何附件。

其他提示

您可能需要查看两个 NSTextStorage 委托方法:

- (void)textStorageWillProcessEditing:(NSNotification *)notification;
/* Delegate can change the characters or attributes */

- (void)textStorageDidProcessEditing:(NSNotification *)notification;
/* Delegate can change the attributes */

textStorageWill / DidProcessEditing 中,您可以调用 - [NSTextStorage editedMask] - [NSTextStorage editedRange] 来查找更改后的内容采取相应行动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top