【问题标题】:Versions in OSX 10.7OSX 10.7 中的版本
【发布时间】:2011-07-27 06:33:44
【问题描述】:

我已在基于文档的应用程序中启用版本和自动保存,因此现在我可以在 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;
}

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

【问题讨论】:

  • 如果旧版本的文本视图中的文本不可编辑,真的有关系吗?只需向 Apple 记录一个错误。
  • 我知道它根本不会改变功能,但它看起来很丑。此外,奇怪的其他应用程序,如 textedit 工作正常。大概和窗户修复有关吧?
  • 您是否查看过 TextEdit 源代码 (file:///Developer/Examples/TextEdit) 以了解它是如何处理这种情况的?
  • 我刚刚看了看。我在任何示例中都找不到这些方法。是不是很奇怪? TextEdit 启用了版本,并且没有实现 NSWindowDelegate 方法,甚至没有实现“@required”方法。这是怎么回事?

标签: objective-c cocoa osx-lion


【解决方案1】:

最终我找到了答案:

为当前文档的窗口(版本浏览器左侧的文档)调用NSWindowDelegate 方法,其他窗口可以通过覆盖-[NSDocument windowForSheet]; 进行协调,或者通过在-[NSDocument windowControllerDidLoadNib:]; 中编写类似的内容更好。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2013-05-17
    • 1970-01-01
    • 2012-08-23
    • 2013-01-08
    • 1970-01-01
    • 2012-03-24
    • 2012-12-08
    相关资源
    最近更新 更多