У меня есть класс, полученный из NSButtonCell
, где я рисую рамку:
override func drawBezel(withFrame frame: NSRect, in controlView: NSView) {
let path = NSBezierPath(bound: frame.insetBy(dx: CGFloat(config.buttonInset), dy: CGFloat(config.buttonInset)), withCorners: corners, withRadius: CGFloat(config.cornerRadius), flip: flipIt)
path.lineWidth = config.borderWidth
if(isEnabled)
{
if(isHighlighted)
{
print("isHighlighted true")
let fillColor: NSColor = colorMap.buttonHighlightColor
let strokeColor: NSColor = colorMap.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
else
{
print("isHighlighted false")
if(showsStateBy.contains(.changeGrayCellMask))
{
print(".changeGrayCellMask")
if(state == .on)
{
print(".on")
let fillColor: NSColor = colorMap.buttonOnColor
let strokeColor: NSColor = colorMap.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
else
{
print(".off")
let fillColor: NSColor = colorMap.buttonBackgroundColor
let strokeColor: NSColor = colorMap.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
else
{
print("!.changeGrayCellMask")
let fillColor: NSColor = colorMap.buttonBackgroundColor
let strokeColor: NSColor = colorMap.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
}
else
{
let fillColor: NSColor = colorMap.buttonBackgroundDisabledColor
let strokeColor: NSColor = colorMap.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
Кроме того, мне присвоено keyEquivalent
кнопке с моей пользовательской ячейкой.
Это прекрасно работает при использовании щелчка мыши или нажатия клавиши на macOS High Sierra .Подсветка отображается только тогда, когда мышь или клавиша не работают.
Вывод журнала выглядит следующим образом:
**after click with mouse**
isHighlighted true
isHighlighted false
!.changeGrayCellMask
**after shortcut key**
isHighlighted true
isHighlighted false
!.changeGrayCellMask
Однако на Мохаве поведение при нажатии клавиш отличается,После нажатия клавиши выделенное состояние сохраняется, в то время как при использовании мыши выделение работает, как и ожидалось.
Вывод журнала из Мохаве:
**Mojave click with mouse**
isHighlighted true
isHighlighted false
!.changeGrayCellMask
**Mojave after shortcut key**
isHighlighted false
!.changeGrayCellMask
isHighlighted true <----- this is odd
Итак, есть ли что-то, что было изменено в Мохаве.Как видите, drawBezel
порядок звонков совершенно неожидан.Странная вещь, почему это происходит только при использовании клавиатуры.
Как добиться поведения подсветки кнопок с помощью клавиатуры, аналогичной щелчку мышью по Мохаве?
ОБНОВЛЕНИЕ
Мне удалось создать минимальный проект в XCode Playground, демонстрирующий проблему.Вы можете скачать его здесь