2012-06-08 38 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