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

我正在使用Web服务管理自己的保存和自动保存,只是不想让标题栏中的内容分散注意力。

我尝试覆盖:

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

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

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

    我也尝试过这个:
    [[self.window standardWindowButton: NSWindowDocumentVersionsButton] setTitle:nil];
    

    那显示了一个空白字符串而不是Edited,但是破折号仍然出现-通常将文档名称和Edited分开的破折号。

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

    最佳答案

    几种选择:

  • 要获取指向“破折号”的指针,请在[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
    
  • 您可以覆盖NSWindow的-setRepresentedURL:。这也会影响NSWindowDocumentIconButton和弹出菜单,但是如果需要,您可以手动创建它:[NSWindow standardWindowButton:NSWindowDocumentIconButton]。
  • 覆盖这三个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/

    10-12 05:39