我有一个文本视图,它从存储在模型对象中的属性字符串获取内容。我在抽屉中列出了几个模型对象,当用户单击其中一个时,文本视图交换其内容。
我现在还需要将撤消管理器换成文本视图。我在模型对象上初始化了一个undo管理器,并使用undomanagerfortextview将其返回到文本视图,但是有些地方不太正确。
战略性的日志记录语句向我展示了一切都按计划工作:在启动时,一个新的模型对象被正确初始化,一个非空的撤销管理器总是由文本视图拉取。但当我真的要撤销的时候,我就是无法得到我想要的行为。
我打开一个窗口,键入一些内容并按cmd+z,然后撤消工作。 我打开一个窗口,键入一些内容,在表上选择一个新模型,键入一些内容,返回到第一个模型并尝试撤消,得到的只是一声蜂鸣。
Something 在文档上,我感到惊讶,因为这意味着我不能对几个模型对象执行撤消操作:
默认的撤消和重做行为 应用于文本字段和中的文本 只要字段或单元格是 第一反应者(即 键盘动作的焦点)。一旦 插入点离开字段或 单元格,以前的操作不能是 未完成的
您可能需要子类nsundomanager并重写 removeAllActionsWithTarget: 和 removeAllActions ,至少要记录下来,可能让他们不行动。
removeAllActionsWithTarget:
removeAllActions
别忘了实例化子类而不是原来的nsundomanager。(很容易忘记,有些读者可能没有意识到他们需要这样做。)