禁用 NSButton 突出显示并停止图像在按下时更改
Disable NSButton highlight and stop image from changing when pressed
在我的新 MacOS 应用程序中,我使用带有图像的 NSButton。每当我按住按钮时,当前图像将变为 darker/highlighted,直到我再次松开按钮。我不想要这种行为,但真的不知道如何禁用它。当前按钮设置:
The main answer on this old post 解释了一种通过将按钮类型更改为 MomentaryChange
来实现的方法,但这似乎不再有效。
如果可能的话,我想在故事板本身中禁用它,但如果这不可能,我可以使用代码来实现它。
我通常必须同时设置这两项才能完全停止此行为:
button.setButtonType(.momentaryChange)
button.isBordered = false
希望对您有所帮助。
在摆弄 NSButton 几个小时后,我终于弄明白了如何控制它的按下状态。
NSButton 本身不提供任何方式来控制它,但底层的 NSButtonCell 提供。为按下状态设置图像:
(self.myButton.cell! as! NSButtonCell).alternateImage = NSImage(named: "myImage")
您还可以使用 highlightsBy
(突出显示表示按下)和 showsStateBy
(状态通常与复选按钮一起使用,复选按钮具有 on 和 off 状态标志)。除了所有预定义状态 NSContentsCellMask
、NSPushInCellMask
,
NSChangeGrayCellMask
和 NSChangeBackgroundCellMask
您也可以将它们设置为 0 以禁用不同的绘图。
我发现这个 old Github post 更详细地解释了它。
所以要在 pressed/highlighted 时禁用不同的外观:
(self.timerButton.cell! as! NSButtonCell).highlightsBy = NSCell.StyleMask(rawValue: 0)
我还找到了一种禁用突出显示状态本身的方法,这在您有很多按钮时可能很有用。您可以在自定义 NSButton class 或常规扩展中覆盖 draw(_ dirtyRect: NSRect)
函数,以将 -highlighted
标志保持为 false:
extension NSButton {
override open func draw(_ dirtyRect: NSRect) {
self.highlight(false)
super.draw(dirtyRect)
}
}
在我的新 MacOS 应用程序中,我使用带有图像的 NSButton。每当我按住按钮时,当前图像将变为 darker/highlighted,直到我再次松开按钮。我不想要这种行为,但真的不知道如何禁用它。当前按钮设置:
The main answer on this old post 解释了一种通过将按钮类型更改为 MomentaryChange
来实现的方法,但这似乎不再有效。
如果可能的话,我想在故事板本身中禁用它,但如果这不可能,我可以使用代码来实现它。
我通常必须同时设置这两项才能完全停止此行为:
button.setButtonType(.momentaryChange)
button.isBordered = false
希望对您有所帮助。
在摆弄 NSButton 几个小时后,我终于弄明白了如何控制它的按下状态。 NSButton 本身不提供任何方式来控制它,但底层的 NSButtonCell 提供。为按下状态设置图像:
(self.myButton.cell! as! NSButtonCell).alternateImage = NSImage(named: "myImage")
您还可以使用 highlightsBy
(突出显示表示按下)和 showsStateBy
(状态通常与复选按钮一起使用,复选按钮具有 on 和 off 状态标志)。除了所有预定义状态 NSContentsCellMask
、NSPushInCellMask
,
NSChangeGrayCellMask
和 NSChangeBackgroundCellMask
您也可以将它们设置为 0 以禁用不同的绘图。
我发现这个 old Github post 更详细地解释了它。
所以要在 pressed/highlighted 时禁用不同的外观:
(self.timerButton.cell! as! NSButtonCell).highlightsBy = NSCell.StyleMask(rawValue: 0)
我还找到了一种禁用突出显示状态本身的方法,这在您有很多按钮时可能很有用。您可以在自定义 NSButton class 或常规扩展中覆盖 draw(_ dirtyRect: NSRect)
函数,以将 -highlighted
标志保持为 false:
extension NSButton {
override open func draw(_ dirtyRect: NSRect) {
self.highlight(false)
super.draw(dirtyRect)
}
}