在NSTextView中捕获撤销和重做编辑文本组

4
我正在为一款现有应用编写插件,需要捕获撤销和重做操作修改的文本和范围。我可以访问应用程序已创建的NSUndoManager和NSTextView,并且可以注册通知。是否有一种方法利用这些元素来获取被撤销/重做的文本组?
1个回答

3

我没有这样做过,所以只能依靠文档/知识。

因为您可以访问textview,所以您可以成为textview代表。然后,您将收到有用的消息...

在文本更改之前:

  • textView:shouldChangeTextInRange:replacementString:
  • textView:shouldChangeTextInRanges:replacementStrings:
  • textView:shouldChangeTypingAttributes:toAttributes:

文本更改后:

  • textViewDidChangeTypingAttributes:

我不知道您是否会收到这些更改(UndoManager是否绕过此类内容?),但您可能会。无论如何,在处理前面的消息时,您都可以查询选择设置。

在选择更改之前:

  • textView:willChangeSelectionFromCharacterRange:toCharacterRange:
  • textView:willChangeSelectionFromCharacterRanges:toCharacterRanges:

之后:

  • textViewDidChangeSelection:

UndoManager应该告诉您它正在执行撤消的过程,这意味着您可以区分普通更改和基于撤消的更改。

这似乎足够了解,希望能对您有所帮助。


你的回答让我对 NSUndoManager 的通知有了更深刻的理解: NSUndoManagerCheckpointNotification、NSUndoManagerDidOpenUndoGroupNotification、NSUndoManagerDidCloseUndoGroupNotification 等等。虽然我不认为有一种“简单”的方法可以实现我的目标,但我相信组合使用这些通知会让我到达目的地。谢谢! - afrederick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接