【问题标题】:Disable NSButton highlight and stop image from changing when pressed禁用 NSButton 突出显示并在按下时停止图像更改
【发布时间】:2019-11-04 14:11:37
【问题描述】:

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

The main answer on this old post 解释了一种将按钮类型更改为MomentaryChange 的方法,但这似乎不再起作用。

如果可能的话,我想在情节提要本身中禁用它,但如果我不能这样做,我可以使用代码来实现它。

【问题讨论】:

    标签: swift macos nsbutton


    【解决方案1】:

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

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

    您还可以通过使用highlightsBy高亮表示按下)和showsStateBy(状态通常与复选按钮一起使用,它们具有onoff 状态标志)。除了所有预定义的状态NSContentsCellMaskNSPushInCellMaskNSChangeGrayCellMaskNSChangeBackgroundCellMask 您也可以将它们设置为 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)
        }
    }
    

    【讨论】:

      【解决方案2】:

      我通常必须同时设置这两个东西才能完全停止这种行为:

      button.setButtonType(.momentaryChange)
      button.isBordered = false
      

      希望对您有所帮助。

      【讨论】:

      • 我将这两个都添加到 viewDidLoad 但按下时图像仍然会改变/变黑
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多