8

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

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

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

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

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

4

3 回答 3

4

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

于 2009-10-23T16:17:15.373 回答
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]了解发生了什么变化,然后采取相应的行动。

于 2009-10-23T16:21:50.170 回答
0

委托方法有各种极端情况。最好是NSTextStorage类 class

于 2020-05-29T04:21:14.380 回答