Отключить подсветку NSButton и остановить изменение изображения при нажатии - PullRequest
0 голосов
/ 21 июня 2019

Внутри моего нового приложения MacOS я использую NSButton с изображением.Всякий раз, когда я нажимаю кнопку и удерживаю ее, текущее изображение становится темнее / выделенным, пока я снова не отпущу кнопку.Я не хочу такого поведения, но на самом деле не могу понять, как его отключить.Текущие настройки кнопок:

enter image description here

Основной ответ на это старое сообщение объясняет способ сделать это, изменив тип кнопки наMomentaryChange, но это больше не похоже на работу.

Если это возможно, я хотел бы отключить его в самой раскадровке, но если я не могу, я в порядке с использованием кода для него.

Ответы [ 2 ]

0 голосов
/ 22 июня 2019

После нескольких часов возни с 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)
    }
}
0 голосов
/ 21 июня 2019

Я обычно должен установить обе эти вещи, чтобы полностью остановить это поведение:

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

Надеюсь, это поможет.

...