OSX 10.7中的版本

时间:2011-07-27 06:33:44

标签: objective-c cocoa osx-lion

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

+ (BOOL)autosavesInPlace{ return YES; }

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

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

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

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

也许其他人有同样的问题? 我怎样才能正常工作? :)

编辑

我正在寻找会话107的WWDC示例代码,但该文件夹为空。我错过了什么或者这个会话没有示例代码吗?

EDIT2

Application Kit发行说明(Lion)表示在创建版本浏览器右侧的窗口时调用了windowForSheet

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

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

1 个答案:

答案 0 :(得分:5)

最终我找到了答案:

为当前文档的窗口(版本浏览器左侧的文档)调用

NSWindowDelegate方法,可以通过覆盖-[NSDocument windowForSheet];来协调其他窗口,或者通过在{{1}内部编写类似内容来更好地协调其他窗口{1}}。

我在这里发布了一个简短的教程/备注:Versions in OSX 10.7