我有一个从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 上,按键行为不同。按键后,突出显示的状态保持不变,而在使用鼠标时,突出显示的行为符合预期。
Mojave的日志输出:
**Mojave click with mouse**
isHighlighted true
isHighlighted false
!.changeGrayCellMask
**Mojave after shortcut key**
isHighlighted false
!.changeGrayCellMask
isHighlighted true <----- this is odd
Mojave (Mojave)中是否也发生了一些变化。如您所见,
drawBezel
的调用顺序完全是意外的。奇怪的是,为什么只有在使用键盘时才会发生这种情况。如何使用类似于鼠标在Mojave上的鼠标的键盘来实现按钮突出显示行为?
更新
我能够在XCode Playground中创建最小的项目来演示该问题。您可以下载here
最佳答案
Action 内部:
[button display];
这可能是一个不完善的解决方案。但这对我有用。
关于swift - NSButtonCell高亮显示仍保留在Mojave中的按键上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52924429/