我正在尝试将属性面板实现为基于 NSDocument 的应用程序的辅助窗口。该实现显示了一个 NSWindow(通过 NSWindowController)。
目标是,如果主(文档)或辅助(属性窗口)中的任何一个处于活动状态,则辅助窗口(“属性窗口”)中的属性修改器应该可以使用 CMD-Z 撤消。
出于某种原因,这让我望而却步。
我当前的实现/测试非常基础。为了测试这个想法,我有一个 NSSlider 绑定到一个名为“aValue”的属性,该属性暴露在“属性”NWindowController 上。这会做这样的事情:
- (void) undoAValueUsing:(int)oldValue {
self.aValue = oldValue;
}
- (void)setAValue:(int)aValue {
if(aValue != _aValue) {
NSLog(@"Value is now: %d", aValue);
[[self.undoManager prepareWithInvocationTarget:self] undoAValueUsing:_aValue];
[self.undoManager setActionName:@"Ra"];
_aValue = aValue;
}
因此,对属性的任何更改都会记录一个“撤消”操作。
问题是,没有出现撤消...就好像它没有注册,或者如果活动菜单项正在查看其他撤消管理器。CMD-Z 只会产生“哔”声(又名:noop)。
这个简单示例的完整代码在这里:https ://dl.dropboxusercontent.com/u/421935/TestApp/Test.zip
这个想法是您单击按钮以查看属性面板,对最顶部的滑块进行更改(没有其他滑块已实现撤消),您应该能够 CMD-Z t 撤消它。
顺便说一句:如果您查看示例代码,您会看到我尝试将自定义窗口 manager.undoManager 设置为 document.undoManager。它没有任何区别。
唔。我想我要疯了。这应该很简单!一定是遗漏了一些明显的东西!
任何关于互联网人的启示?