【发布时间】:2010-11-22 06:42:03
【问题描述】:
Apples 人机界面指南说:
macOS Human Interface Guidelines: Panels
如何制作该图像中的第一个标题栏(只有一个关闭按钮)。在 IB 中同时禁用 Resize 和 Minimize 只会使调整大小/最小化按钮被禁用。但我希望它们消失。我该怎么做?
【问题讨论】:
标签: objective-c cocoa window nswindow titlebar
Apples 人机界面指南说:
macOS Human Interface Guidelines: Panels
如何制作该图像中的第一个标题栏(只有一个关闭按钮)。在 IB 中同时禁用 Resize 和 Minimize 只会使调整大小/最小化按钮被禁用。但我希望它们消失。我该怎么做?
【问题讨论】:
标签: objective-c cocoa window nswindow titlebar
接受答案的 Swift 代码
window!.standardWindowButton(.miniaturizeButton)!.isHidden = true
window!.standardWindowButton(.zoomButton)!.isHidden = true
window!.standardWindowButton(.closeButton)!.isHidden = true
【讨论】:
我也需要这个,但鼠标悬停时可见 - 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 不透明度,以使跟踪区域有效。
【讨论】:
另一种方式是……
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];
}
}
}
}
【讨论】:
我相信这应该可行:
[[window standardWindowButton:NSWindowCloseButton] setHidden:YES];
[[window standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES];
[[window standardWindowButton:NSWindowZoomButton] setHidden:YES];
【讨论】:
[[window standardWindowButton:NSWindowCloseButton] setHidden:YES]; 隐藏关闭按钮(如果显示)。