在我的iOS应用程序界面中,我有明确的撤消&重做按钮(摇动到撤消是一个非常重量级的动作,在这种情况下,撤消操作非常频繁)。通常情况下,我会使用KVO来观察NSUndoManager的canUndo和canRedo键路径并启用&当通知进来时禁用按钮。不幸的是,NSUndoManager似乎不符合这些关键路径的KVO - 或者至少,我没有看到任何通知。
所以我的问题是:我如何让这个工作?我只是对KVO做错了吗? (我已经进行了双重和三重检查,但始终存在这种可能性)。有没有其他方法可以做到这一点,我没想到? (我只是在每次runloop旋转时检查-canUndo的值,但这对我来说有一种不好的代码味道。)
(请注意,很可能NSUndoManager在iOS和Mac OS X上有所不同,所以我不认为“在Mac上运行”将是一个有用的答案,在这种情况下)
答案 0 :(得分:13)
注册您的NSUndoManager的NSUndoManagerDidUndoChangeNotification和朋友,以检查何时创建新的撤消组并从堆栈弹出并适当更新按钮的状态。