【问题标题】:Capturing undo and redo edit text groups in NSTextView在 NSTextView 中捕获撤消和重做编辑文本组
【发布时间】:2012-06-12 23:55:58
【问题描述】:

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

【问题讨论】:

    标签: objective-c cocoa nstextview nsundomanager


    【解决方案1】:

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

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

    文字改变前:

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

    文字变化后:

    • textViewDidChangeTypingAttributes:

    我不知道您是否会收到这些更改(UndoManager 会绕过这些内容吗?),但您可能会收到。在任何情况下,您都可以在处理之前的消息时查询选择设置。

    选择更改之前:

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

    之后:

    • textViewDidChangeSelection:

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

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

    【讨论】:

    • 除了这些 NSUndoManager 通知之外,您的回答让我走上了正确的轨道:NSUndoManagerCheckpointNotification、NSUndoManagerDidOpenUndoGroupNotification、NSUndoManagerDidCloseUndoGroupNotification 等。我不相信有一种“简单”的方式来做我想做的事,但我认为结合这些通知将使我到达那里。谢谢!
    猜你喜欢
    • 2017-12-29
    • 2020-11-28
    • 2012-01-05
    • 1970-01-01
    • 2021-03-22
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多