使用iPhone SDK中的NSUndoManager撤消/重做

时间:2010-07-19 16:58:08

标签: iphone undo-redo nsundomanager

我一直在尝试使用NSUndoManager类在我的应用程序中设计撤消/重做功能,并看到一些设计困难。 在我的应用程序中,我只有一个方法

-(IBAction) addLastBall:(Ball *)ball

因此,当用户在UI中选择一个按钮时,我会将一个球对象添加到我的数组列表中。但是,我没有任何动作按钮来移除球,这是UI工作流程的设计,无法更改。 因此,为了实现撤销,我在addLastBall方法中调用了以下代码

[undoManager registerUndoWithTarget:self selector:@selector(removeBall:) object:ball];

执行此操作后,当用户尝试执行撤消时,将使用ball对象调用removeBall方法。一切都很好。 但是,我不知道如何处理重做部分,当用户尝试重做时,我不确定会调用哪个方法,因为我需要使用撤消操作添加用户刚删除的球对象。 任何见解都会非常有用。

非常感谢。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

没有方法被调用。 如果用户选择重做,NSUndoManager只会保存撤消操作(重做)的反向,这将完成。

它全部在NSUndoManager中实现,因此您不必担心它。 如果您希望在重做时调用您的方法,您应该考虑创建自己的撤消管理器,但我不建议您这样做。它可以变得非常复杂,而且,NSUndoManager完美地处理所有事情。