代码之家  ›  专栏  ›  技术社区  ›  ruipacheco

文本视图的多个撤消管理器

  •  0
  • ruipacheco  · 技术社区  · 15 年前

    我有一个文本视图,它从存储在模型对象中的属性字符串获取内容。我在抽屉中列出了几个模型对象,当用户单击其中一个时,文本视图交换其内容。

    我现在还需要将撤消管理器换成文本视图。我在模型对象上初始化了一个undo管理器,并使用undomanagerfortextview将其返回到文本视图,但是有些地方不太正确。

    战略性的日志记录语句向我展示了一切都按计划工作:在启动时,一个新的模型对象被正确初始化,一个非空的撤销管理器总是由文本视图拉取。但当我真的要撤销的时候,我就是无法得到我想要的行为。

    我打开一个窗口,键入一些内容并按cmd+z,然后撤消工作。 我打开一个窗口,键入一些内容,在表上选择一个新模型,键入一些内容,返回到第一个模型并尝试撤消,得到的只是一声蜂鸣。

    Something 在文档上,我感到惊讶,因为这意味着我不能对几个模型对象执行撤消操作:

    默认的撤消和重做行为 应用于文本字段和中的文本 只要字段或单元格是 第一反应者(即 键盘动作的焦点)。一旦 插入点离开字段或 单元格,以前的操作不能是 未完成的

    1 回复  |  直到 15 年前
        1
  •  2
  •   Peter Hosey    15 年前

    您可能需要子类nsundomanager并重写 removeAllActionsWithTarget: removeAllActions ,至少要记录下来,可能让他们不行动。

    别忘了实例化子类而不是原来的nsundomanager。(很容易忘记,有些读者可能没有意识到他们需要这样做。)