如何防止脏的NSDocument的窗口标题显示“已编辑”?
我正在使用Web服务管理自己的保存和自动保存,只是不想让标题栏中的内容分散注意力。
我尝试覆盖:
-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 开窗口的这一部分吗?
最佳答案
几种选择:
@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
// 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/