【问题标题】:Hide buttons from titlebar in Cocoa在 Cocoa 中隐藏标题栏中的按钮
【发布时间】:2010-11-22 06:42:03
【问题描述】:

Apples 人机界面指南说:

macOS Human Interface Guidelines: Panels

如何制作该图像中的第一个标题栏(只有一个关闭按钮)。在 IB 中同时禁用 ResizeMinimize 只会使调整大小/最小化按钮被禁用。但我希望它们消失。我该怎么做?

【问题讨论】:

    标签: objective-c cocoa window nswindow titlebar


    【解决方案1】:

    接受答案的 Swift 代码

    window!.standardWindowButton(.miniaturizeButton)!.isHidden = true
    window!.standardWindowButton(.zoomButton)!.isHidden = true
    window!.standardWindowButton(.closeButton)!.isHidden = true
    

    【讨论】:

    • 不工作(在 xcode 9.2 上)...标题和关闭、miniaturizeButton、全屏按钮仍然存在。
    【解决方案2】:

    我也需要这个,但鼠标悬停时可见 - Swift:

    var trackingTag: NSTrackingRectTag?
    override func mouseEntered(with theEvent: NSEvent) {
        if trackingTag == theEvent.trackingNumber {
            window!.standardWindowButton(.closeButton)!.alphaValue = 1.00
        }
    }
    override func mouseExited(with theEvent: NSEvent) {
        if trackingTag == theEvent.trackingNumber {
            window!.standardWindowButton(.closeButton)!.alphaValue = 0.01
        }
    }
    func updateTrackingAreas(_ establish : Bool) {
        if let tag = trackingTag {
            window!.standardWindowButton(.closeButton)!.removeTrackingRect(tag)
        }
        if establish, let closeButton = window!.standardWindowButton(.closeButton) {
            trackingTag = closeButton.addTrackingRect(closeButton.bounds, owner: self, userData: nil, assumeInside: false)
        }
    }
    override func windowDidLoad() {
        window!.ignoresMouseEvents = false
        updateTrackingAreas(true)
        window!.standardWindowButton(.closeButton)!.alphaValue = 0.01
    }
    func windowShouldClose(_ sender: Any) -> Bool {
        window!.ignoresMouseEvents = true
        updateTrackingAreas(false)
        return true
    }
    

    需要可见性,但需要一点点 - 0.01 不透明度,以使跟踪区域有效。

    【讨论】:

      【解决方案3】:

      另一种方式是……

      for (id subview in [self window].contentView.superview.subviews) {
          if ([subview isKindOfClass:NSClassFromString(@"NSTitlebarContainerView")]) {
              NSView *titlebarView = [subview subviews][0];
              for (id button in titlebarView.subviews) {
                  if ([button isKindOfClass:[NSButton class]]) {
                      [button setHidden:YES];
                  }
              }
          }
      }
      

      【讨论】:

      • 你能详细说明你的答案吗?我的意思是为什么以及如何不同。
      • @Fawzan,这种方式可以应用于自定义标题视图。
      【解决方案4】:

      我相信这应该可行:

      [[window standardWindowButton:NSWindowCloseButton] setHidden:YES];
      [[window standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES];
      [[window standardWindowButton:NSWindowZoomButton] setHidden:YES];
      

      【讨论】:

      • 还有[[window standardWindowButton:NSWindowCloseButton] setHidden:YES]; 隐藏关闭按钮(如果显示)。
      • @pkamb 需要帮助才能全屏设置
      • 完美,正是我在尝试创建类似 Quicktime 播放器的界面时所寻找的。​​span>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2012-09-11
      • 1970-01-01
      • 2021-04-25
      相关资源
      最近更新 更多