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

时间:2012-06-08 23:12:57

标签: objective-c cocoa nstextview nsundomanager

我正在为现有应用编写插件,我需要捕获受撤消和重做操作影响的修改后的文本和范围。我能够访问应用程序创建的NSUndoManager和NSTextView,并且我能够注册通知。有没有办法利用这些元素来获取撤消/重做的文本组?

1 个答案:

答案 0 :(得分:3)

我没有这样做,所以我只是按照文档/知识进行操作。

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

在文字更改之前:

  • 的TextView:shouldChangeTextInRange:replacementString:
  • 的TextView:shouldChangeTextInRanges:replacementStrings:
  • 的TextView:shouldChangeTypingAttributes:toAttributes:

文字更改后:

  • textViewDidChangeTypingAttributes:

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

在选择更改之前:

  • 的TextView:willChangeSelectionFromCharacterRange:toCharacterRange:
  • 的TextView:willChangeSelectionFromCharacterRanges:toCharacterRanges:

后:

  • textViewDidChangeSelection:

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

这似乎已经足够了,我希望它有所帮助。