Swift NSButtonCell突出显示仍保留在莫哈韦的按键上
我有一个派生自Swift NSButtonCell突出显示仍保留在莫哈韦的按键上,swift,macos,nsbutton,macos-mojave,nsbuttoncell,Swift,Macos,Nsbutton,Macos Mojave,Nsbuttoncell,我有一个派生自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, w
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 click with mouse**
isHighlighted true
isHighlighted false
!.changeGrayCellMask
**Mojave after shortcut key**
isHighlighted false
!.changeGrayCellMask
isHighlighted true <----- this is odd
**Mojave用鼠标点击**
石破天惊
石破天惊
!.细胞膜
**快捷键后的莫哈韦**
石破天惊
!.细胞膜
isHighlighted true在动作中:
[button display];
这可能是一个不优雅的解决方案。但这对我来说很有效。听起来像是莫哈韦引入的一个bug。是否有任何解决方法?使用游乐场演示项目更新,在info.plist中显示问题集NSRequiresAquaSystemAppearance=YES,然后查看问题所在happen@RonGahlot,在info.plist中设置该键并不能解决问题。