gpt4 book ai didi

cocoa - 覆盖 NSDocument 窗口标题中的 "Edited"

转载 作者:行者123 更新时间:2023-12-03 16:07:34 26 4
gpt4 key购买 nike

如何防止窗口标题为脏 NSDocument 显示“已编辑”?

我自己使用网络服务来管理保存和自动保存,只是不想在标题栏中分散注意力。

我尝试过覆盖:

  • NSDocument 的 -isDocumentEdited-hasUnautosavedChanges 始终返回 NO
  • -[NSWindowController setDocumentEdited] 不执行任何操作,或者始终使用 NO 无论参数的实际值如何。
  • -[NSWindowController SynchronizeWindowTitleWithDocumentName] 不执行任何操作。
  • -[NSWindow setDocumentEdited] 不执行任何操作,或者始终使用 NO,无论参数的实际值如何。

在所有情况下,当我对保存的文档进行更改时,标题栏仍会更改为“已编辑”。

如果我重写 -[NSDocument updateChangeCount:]-[NSDocument updateChangeCountWithToken:forSaveOperation:] 不执行任何操作,我可以防止这种情况发生,但它会影响保存、自动保存和其他文档行为。

我也尝试过这个:

[[self.window standardWindowButton: NSWindowDocumentVersionsButton] setTitle:nil];

显示了一个空白字符串而不是“已编辑”,但破折号仍然出现 - 通常分隔文档名称和“已编辑”的破折号。

知道如何从文档中 pry 开窗口的这一部分吗?

最佳答案

几个选项:

  1. 要获取指向“破折号”的指针,请在 [window.contentView.superview.subviews] 中查找 stringValue 等于“-”的 TextField。您也可以将其文本设置为空字符串。

    @implementation NSWindow (DashRetrivalMethod)
    - (NSTextField*)versionsDashTextField
    {
    NSTextField* res = nil;
    NSView* themeFrame = [self.contentView superview];
    for (NSView* tmp in [themeFrame subviews])
    {
    if ([tmp isKindOfClass:[NSTextField class]])
    {
    if ([[(NSTextField*)tmp stringValue] isEqualToString:@"—"])
    {
    res = (NSTextField*)tmp;
    break;
    }
    }
    }
    return res;
    }
    @end
  2. 您可以覆盖 NSWindow 的 -setRepresentedURL:。这也会影响 NSWindowDocumentIconButton 和弹出菜单,但如果需要,您可以通过以下方式手动创建它:[NSWindow standardWindowButton: NSWindowDocumentIconButton]。

  3. 重写这三个 NSDocument 的未记录方法之一:

    // Always return here NO if you don't want the version button to appear. 
    // This seems to be the cleanest options, besides the fact that you are
    /// overriding a private method.
    - (BOOL)_shouldShowAutosaveButtonForWindow:(NSWindow*)window;

    // Call super with NO
    - (void)_setShowAutosaveButton:(BOOL)flag;

    // Here the button and the dash are actually created
    - (void)_endVersionsButtonUpdates;

    // Here Cocoa hide or unhide the edited button
    - (void)_updateDocumentEditedAndAnimate:(BOOL)flag

关于cocoa - 覆盖 NSDocument 窗口标题中的 "Edited",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10344068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com