禁用NSButton高亮显示并在按下时停止更改图像

时间:2019-06-21 17:51:28

标签: swift macos nsbutton

在我的新MacOS应用程序中,我使用带有图像的NSButton。每当我按住按钮时,当前图像将变暗/突出显示,直到再次释放按钮。我不希望这种行为,但真的不知道如何禁用它。当前按钮设置:

enter image description here

The main answer on this old post介绍了一种通过将按钮类型更改为15 15来实现此目的的方法,但这似乎不再起作用。

如果可能的话,我想在情节提要板中禁用它,但是,如果那不可能,我可以使用代码。

1 个答案:

答案 0 :(得分:0)

在与NSButton纠缠了几个小时之后,我终于弄清楚了如何控制其按下状态。 NSButton本身不提供任何控制它的方法,但是底层的NSButtonCell提供了控制它的方法。要将图像设置为按下状态:

(self.myButton.cell! as! NSButtonCell).alternateImage = NSImage(named: "myImage")

您还可以使用highlightsBy突出显示表示按下)和showsStateBy(状态通常与选中状态一起使用)来定义按钮显示其不同状态的方式。按钮,其中有 on off 状态标志)。除了所有预定义状态NSContentsCellMaskNSPushInCellMask外, NSChangeGrayCellMaskNSChangeBackgroundCellMask也可以将它们设置为0以禁用其他图形。  我发现这个old Github post对其进行了更详细的解释。

因此要在按下/突出显示时禁用其他外观:

(self.timerButton.cell! as! NSButtonCell).highlightsBy = NSCell.StyleMask(rawValue: 0)

我还找到了一种禁用突出显示状态本身的方法,当您有许多按钮时,这可能很有用。您可以在自定义NSButton类或常规扩展中覆盖draw(_ dirtyRect: NSRect)函数,以将-highlighted标志保持为false:

extension NSButton {
    override open func draw(_ dirtyRect: NSRect) {
        self.highlight(false)
        super.draw(dirtyRect)
    }
}