【问题标题】:How to hide file icon in window titlebar of NSDocument如何在 NSDocument 的窗口标题栏中隐藏文件图标
【发布时间】:2015-03-21 11:21:57
【问题描述】:

有谁知道如何隐藏基于文档的应用程序窗口标题栏中的小图标?

NSWindow 的文档说:

要自定义文档图标,可以使用以下代码段:

[[window standardWindowButton:NSWindowDocumentIconButton] setImage:nil];

但这不起作用,因为 window:stardardWindowButton:NSWindowDocumentIconButton 返回 nil,根据文档,这意味着该按钮不在窗口的视图层次结构中。

我查看了 NSDocument,但似乎并没有在任何地方引用该图标。

我也尝试了How to show a title of document window without icon? 中的所有答案,但它们不起作用。我猜小牛队发生了一些变化。

【问题讨论】:

  • 您确定window 不是nil
  • window 不是 nil,但 [window:standardWindowButton:NSWindowDocumentIconButton] 是 nil。

标签: objective-c cocoa


【解决方案1】:

另一种方法是覆盖 NSWindowstandardWindowButton:forStyleMask: 类函数并返回 nil 以获取要删除的按钮:

class Window: NSWindow {

    class var undesiredButtons: [NSWindowButton] { 
        return [.DocumentIconButton, .DocumentVersionsButton]
    }

    override class func standardWindowButton(button: NSWindowButton, forStyleMask: Int) -> NSButton? {
        if contains(undesiredButtons, button) { return nil }
        return super.standardWindowButton(button, forStyleMask: forStyleMask)
    }
}

【讨论】:

    【解决方案2】:

    原来标题栏中的文件图标是一个NSThemeDocumentButton按钮。奇怪的是,它在 windowControllerDidLoadNib 被调用时并不存在,但它确实在“以后”存在。所以我在我的代码和 bam 中放了一点延迟,就是这样。

    这是我放在 windowControllerDidLoadNib 中的:

    dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC));
    dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){
        NSWindow *window = self.windowForSheet;
        [[window standardWindowButton:NSWindowDocumentIconButton] setImage:nil];
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-04
      • 2023-03-16
      • 2012-05-31
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多