由于我的应用程序中某些NSTextView附件的语义,我想知道它们何时从我的文本存储中插入或删除。
我的NSTextView子类实现了shouldChangeTextInRange:replacementString:方法,它允许我轻松查看附件何时被替换(我可以在指定范围内搜索文本存储)。
因为替换字符串只是一个NSString而不是NSAttributedString,所以我无法从这个方法中看到是否插入了附件。如果正在编辑“仅属性”,文档甚至可以说字符串可能是nil。
所以问题是,什么是插入附件时最好的覆盖点?或者也许有用:什么是最佳覆盖点,以查看何时修改属性?
更新:我上面说过,我无法知道是否插入了附件。我向我指出,我可以告诉我涉及“一个”附件,因为该字符串将包含神奇的NSAttachmentCharacter。但在编辑完成之前,我不会提供有关附件的具体信息。
答案 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。