gpt4 book ai didi

swift - NSButtonCell 突出显示仍保留在 Mojave 中的按键上

转载 作者:IT王子 更新时间:2023-10-29 05:32:07 26 4
gpt4 key购买 nike

我有一个派生自 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 分配给了按钮。

ma​​cOS 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 中是否有一些更改。如您所见,drawBezel 调用顺序完全出乎意料。奇怪的是为什么它只在使用键盘时发生。

如何使用键盘实现按钮高亮行为,类似于在 Mojave 上单击鼠标?

更新

我能够在 XCode Playground 中创建最小项目来演示该问题。可以下载here

最佳答案

Action 内部:

[button display]; 

这可能不是一个优雅的解决方案。但这对我有用。

关于swift - NSButtonCell 突出显示仍保留在 Mojave 中的按键上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52924429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com