0

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

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

策略性放置的日志语句向我展示了一切都按计划进行:在启动时,一个新的模型对象被正确初始化,并且文本视图总是拉出一个非空的撤消管理器。但是当谈到实际撤消时,我就是无法获得我想要的行为。

我打开一个窗口,输入一些内容并按 cmd+z,然后撤消操作。我打开一个窗口,输入一些东西,在桌子上选择一个新模型,输入一些东西,回到第一个模型并尝试撤消,我得到的只是一声哔哔声。

文档中的某些内容让我大吃一惊,因为这意味着我无法对多个模型对象进行撤消:

只要字段或单元格是第一响应者(即键盘操作的焦点),默认的撤消和重做行为就适用于文本字段和单元格中的文本。一旦插入点离开字段或单元格,之前的操作将无法撤消。

4

1 回答 1

2

您可能希望继承 NSUndoManager 并覆盖removeAllActionsWithTarget:and removeAllActions,至少要记录它们,可能使它们成为无操作。

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

于 2010-03-21T20:51:04.827 回答