8

ダーティな 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 を区切るダッシュが表示されていました。

ウィンドウのこの部分をドキュメントからこじ開ける方法はありますか?

4

3 に答える 3

6

いくつかのオプション:

  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. これら3つのNSDocumentの文書化されていないメソッドの1つをオーバーライドします。

    // 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
    
于 2012-08-17T01:53:25.287 に答える
1

- (BOOL)hasUnautosavedChangesオーバーライドに加えてNSDocuments をオーバーライドしようとしました- (BOOL) isDocumentEditedか?

于 2012-04-30T20:51:00.310 に答える