6

我在基于文档的应用程序中启用了版本和自动保存,所以现在我可以在 OSX 10.7 中查看我的每个文档的版本浏览器(类似时间机器的界面)

+ (BOOL)autosavesInPlace{ return YES; }

我有一个文本视图,正如 WWDC 视频之一,会话 107 中所建议的,我想在进入版本浏览器时禁用文本输入等。所以我实现了 NSWindowDelegate 方法:

- (void)windowWillEnterVersionBrowser:(NSNotification *)notification{
    [myTextView setEditable:NO];
}
- (void)windowWillExitVersionBrowser:(NSNotification *)notification{
    [myTextView setEditable:YES];
}

现在,myTextView屏幕左侧的文档(当前文档)窗口被禁用,但右侧的文档(过去版本)仍然显示光标。

textView 不可编辑,但光标显示。我还在上述方法中禁用其他东西并重新启用它们,但在上述方法中编写代码似乎只影响当前文档窗口/文档而不影响过去版本的窗口/文档。

也许其他人也有同样的问题?我怎样才能正确地完成这项工作?:)

编辑

我正在寻找会话 107 的 WWDC 示例代码,但该文件夹是空的。我是否遗漏了什么,或者本次会议没有示例代码?

编辑2

Application Kit Release Note (Lion)windowForSheet创建版本浏览器右侧的窗口时调用:

- (NSWindow *)windowForSheet{
    CustomWindow *win = (CustomWindow *)[super windowForSheet];
    [win setUserInteractionEnabled:![self isInViewingMode]]; //disable stuff here
    return win;
}

但是现在当窗口从浏览器版本返回时,用户交互仍然被禁用。:(

4

1 回答 1

5

最终我找到了答案:

NSWindowDelegate为当前文档的窗口(版本浏览器左侧的文档)调用方法,并且可以通过覆盖来协调其他窗口,-[NSDocument windowForSheet];甚至可以通过在内部编写类似的内容来更好地协调-[NSDocument windowControllerDidLoadNib:];

我在这里发布了一个简短的教程/注释:OSX 10.7 中的版本

于 2011-08-02T06:02:08.690 回答