После нескольких часов возни с NSButton я наконец-то понял, как получить контроль над его нажатием.NSButton сам по себе не предлагает никакого способа управления им, но базовый NSButtonCell делает.Чтобы установить изображение для нажатого состояния:
(self.myButton.cell! as! NSButtonCell).alternateImage = NSImage(named: "myImage")
Вы также можете определить способ, которым кнопка показывает свое другое состояние, используя highlightsBy
( выделенный означает нажатие ) иshowsStateBy
(состояния обычно используются с кнопками проверки, которые имеют флаг состояния on и off ).Помимо всех предопределенных состояний NSContentsCellMask
, NSPushInCellMask
, NSChangeGrayCellMask
и NSChangeBackgroundCellMask
, вы также можете установить их в 0, чтобы отключить другой рисунок.Я нашел этот старый пост Github , объясняющий его более подробно.
Поэтому, чтобы отключить различный внешний вид при нажатии / выделении:
(self.timerButton.cell! as! NSButtonCell).highlightsBy = NSCell.StyleMask(rawValue: 0)
Я также нашел способотключено само подсвеченное состояние, что может быть полезно, когда у вас много кнопок.Вы можете переопределить функцию draw(_ dirtyRect: NSRect)
либо в пользовательском классе NSButton, либо в общем расширении, чтобы оставить для флага -highlighted
значение false:
extension NSButton {
override open func draw(_ dirtyRect: NSRect) {
self.highlight(false)
super.draw(dirtyRect)
}
}