Cocoa 如何知道何时将附件属性添加到我的NSTextView?
由于应用程序中某些NSTextView附件的语义,我想知道它们是何时从文本存储中插入或删除的 NSTextView的子类实现了shouldChangeTextInRange:replacementString:方法,该方法允许我轻松查看附件何时将被替换(我可以搜索指定范围内的文本存储) 因为替换字符串只是一个NSString而不是NSAttributedString,所以我无法从这个方法中看出是否插入了附件。文档甚至说,如果编辑“仅属性”,字符串可能为零 所以问题是,插入附件时,最佳覆盖点是什么?或者可能同样有用:当属性被修改时,看到的最佳覆盖点是什么Cocoa 如何知道何时将附件属性添加到我的NSTextView?,cocoa,nstextview,Cocoa,Nstextview,由于应用程序中某些NSTextView附件的语义,我想知道它们是何时从文本存储中插入或删除的 NSTextView的子类实现了shouldChangeTextInRange:replacementString:方法,该方法允许我轻松查看附件何时将被替换(我可以搜索指定范围内的文本存储) 因为替换字符串只是一个NSString而不是NSAttributedString,所以我无法从这个方法中看出是否插入了附件。文档甚至说,如果编辑“仅属性”,字符串可能为零 所以问题是,插入附件时,最佳覆盖点是什么
更新:我在上面说过,我无法知道是否正在插入附件。有人向我指出,我可以看出其中包含“an”附件,因为字符串将包含神奇的NSAttachmentCharacter。但在编辑完成之前,我不会有关于附件的具体信息。我将查看NSTextStorage委托方法-textStorageDidProcessEditing:,每次对基础文本存储进行更改时都应调用该方法。然后,您可以使用-EditeRange、-editedMask和-changeInLength方法确定文本存储的哪个部分已更改,并在该范围内查找您可能感兴趣的任何附件。您可能需要查看两种
NSTextStorage
委托方法:
- (void)textStorageWillProcessEditing:(NSNotification *)notification;
/* Delegate can change the characters or attributes */
- (void)textStorageDidProcessEditing:(NSNotification *)notification;
/* Delegate can change the attributes */
在
textStorageWill/didprocesseediting
内部,您可以调用-[NSTextStorage editedMask]
和-[NSTextStorage editedRange]
来找出发生了什么变化,然后采取相应的措施。委托方法有各种不同的情况。最好是这样 谢谢,布莱恩。这并不像我所希望的那样理想,但它看起来确实会奏效。很遗憾,他们没有在shouldChange…方法中包含属性。据我所知,-textStorageWillProcessEditing:
允许对文本进行比-textstoragedidprocesediting:
更多的更改。你可能想用它来代替。嗨,乔纳森-谢谢你的评论。我对你的答案投了赞成票,但决定接受布赖恩的答案,因为那是早些时候的事,因为它已经累积了几张额外的选票。