2013-10-15 49 views
2

我试图实现属性面板作为基于NSDocument的应用程序的辅助窗口。该实现显示了NSWindow(通过NSWindowController)。撤消辅助NSWindow,可可

目标是,如果主(文档)或辅助(属性窗口)中的任何一个处于活动状态,则辅助窗口中的属性修改器(“属性窗口”)应该可以使用CMD-Z进行撤消。

出于某种原因,这是逃避我。

我目前的实施/测试是非常基本的。 为了测试这个想法,我有一个NSSlider绑定到一个名为'aValue'的属性,暴露在“Properties”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只是产生一个“嘟嘟”(aka:noop)。

完整的代码这个简单的例子是在这里:https://dl.dropboxusercontent.com/u/421935/TestApp/Test.zip

的想法是,你按一下按钮,查看属性面板,修改最上面的滑块(没有其他滑块已撤消执行),你应该能够CMD-Z取消它。

btw:如果你看看示例代码,你会发现我已经尝试将自定义窗口manager.undoManager设置为document.undoManager。它没有任何区别。

嗯。我觉得我疯了。这应该这么简单! 必须错过明显的东西!

任何启示o人的互联网?

回答

2

原来的答案很简单。将文档设置为NSWindow的代表(次要文档)。然后执行:

- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window 

关于Document,返回Doc的undoManager。

完成。