2012-06-08 36 views
4

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

回答

3

我还没有这样做,所以我只是通过文档/知识。

因为你有权访问textview,你可以成为一个textview委托。然后,您会收到有用的消息......

文本更改前:

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

文字修改后:

  • textViewDidChangeTypingAttributes:

我不知道你是否会接受这些变化(做的UndoManager绕过这个东西?),但你可能。无论如何,您可以在处理先前的消息时查询选择设置。

选择更改之前:

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

后:

  • textViewDidChangeSelection:

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

这似乎足以继续,我希望它有帮助。

+0

除了这些NSUndoManager通知之外,你的回答让我走上了正确的轨道:NSUndoManagerCheckpointNotification,NSUndoManagerDidOpenUndoGroupNotification,NSUndoManagerDidCloseUndoGroupNotification等等。我不相信有一种“简单”的方式来做我想做的事,但我认为结合这些通知会得到我在那里。谢谢! – afrederick