【问题标题】:iOS - UITextView + NSUndoManageriOS - UITextView + NSUndoManager
【发布时间】:2011-07-02 01:23:27
【问题描述】:

我正在尝试将撤消/重做功能集成到 UITextView(我正在构建一个 LateX 编辑器)中,但没有运气,老实说,我对这个论点感到非常困惑。这两个操作的步骤我不太明白,我的意思是我需要两个方法

  • 一个删除最后插入的文本
  • 一恢复删除的文字

一个疑问是我从哪里得到最后插入的文本?换句话说,我必须在哪里注册撤消?

  • 在 textViewDidChange 中我可以得到整个文本
  • 在 textViewShouldChangeTextInRange 中我可以插入最后一个字符

我知道我写的不是最好的解释,但我希望这里有人过去也遇到过同样的问题,可以给我一个提示。基本上,要恢复,我必须将撤消/重做功能添加到文本视图,可能有两个按钮与这些操作链接。

提前致谢

【问题讨论】:

    标签: ios cocoa-touch uitextview nsundomanager uitextviewdelegate


    【解决方案1】:

    我现在感觉自己像个白痴 :( 解决方案真的很简单... textView 已经有一个 undoManager 所以基本上对 textView 进行撤消/重做操作的步骤是: 在 viewDidload 内:

    myUndoManager = [textView undoManager];
    

    您要执行操作的位置

    [myUndoManager undo]; // or redo
    

    有时我真的很笨,我几乎是在编写自己的撤消代码......我希望这可以帮助某人

    【讨论】:

    • 我尝试在您的答案中使用您的代码(我希望做同样的事情,有一个撤消和重做按钮),但它说 textView 未声明。你是怎么申报的?
    • user: textView 是“文本视图”。任何文本视图。你给它命名,使用它。
    • 如此简单,但很多人正在做几页长的黑客来解决这个问题。如果可以的话,会给+10。谢谢。
    • 如果可以的话,我希望我能给你+100。我也打算写我的撤消/重做代码。非常感谢!你是英雄:)
    • 我正在使用 UIDocument,它有自己的撤消管理器,用于跟踪文档的各种更改。我不知道为什么我只需要另一个撤消管理器来处理 textView。当有人按下“撤消”时,我会问哪个经理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    相关资源
    最近更新 更多