我的NSButton
使用的是自定义NSButtonCell
类,而该类又覆盖了drawBezel
:
override func drawBezel(withFrame frame: NSRect, in controlView: NSView) {
let path = NSBezierPath(bound: frame.insetBy(dx: CGFloat(NumKeypadConstants.buttonInset), dy: CGFloat(NumKeypadConstants.buttonInset)), withCorners: corners, withRadius: CGFloat(NumKeypadConstants.cornerRadius), flip: flipIt)
path.lineWidth = NumKeypadConstants.borderWidth
if(isEnabled)
{
if(isHighlighted)
{
let fillColor: NSColor = NumKeypadConstants.buttonHighlightColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
else
{
if(state == .on)
{
let fillColor: NSColor = NumKeypadConstants.buttonOnColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
else
{
let fillColor: NSColor = NumKeypadConstants.buttonBackgroundColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
}
else
{
let fillColor: NSColor = NumKeypadConstants.buttonBackgroundDisabledColor
let strokeColor: NSColor = NumKeypadConstants.buttonBorderColor
fillColor.setFill()
strokeColor.setStroke()
path.fill()
path.stroke()
}
}
现在我的按钮支持两种类型1).momentaryChange
2).pushOnPushOff
。我期望根据按钮类型的不同,状态是否会改变。但是,无论我使用setButtonType
进行了什么设置,单元格的.state成员始终会在按下按钮时发生变化。
我是否理解正确,我有责任检查按钮的类型并考虑或忽略.state
?可能是bezelStyle
和按钮类型的某种组合会告诉单元格在使用瞬时类型时内部忽略.state
吗?
如果必须检查按钮类型,那么如何检查NSButtonCell
中的按钮类型?该类型不传递给它。我应该创建自己的属性并通过类型吗?