2009-10-23 35 views
8

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

我的NSTextView的子类实现了shouldChangeTextInRange:replacementString:方法,它允许我很容易地看到何时将要替换附件(我可以在指定范围内搜索文本存储)。

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

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

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

回答

4

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

+0

谢谢Brian。这并不像我所希望的那么理想,但它看起来似乎会有所斩获。遗憾的是,它们不包含shouldChange ...方法中的属性。 – danielpunkass

+0

据我所知,'-textStorageWillProcessEditing:'允许对文本进行更多的更改,而不是'-textStorageDidProcessEditing:'。您可能想使用它。 –

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]找出哪些改变,然后采取相应的行动。

+0

嗨乔纳森 - 感谢评论。我投了你的答案,但决定接受布赖恩的,因为它是早些时候,因为它累积了一些额外的选票。 – danielpunkass

相关问题