如何知道何时将附件属性添加到我的NSTextView?

时间:2009-10-23 15:59:33

标签: cocoa nstextview

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

您可能需要查看两个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]查看更改内容,然后采取相应措施。

答案 2 :(得分:0)

Delegate方法具有各种极端情况。最好subclass NSTextStorage class