我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
?类型不会传递给它。我应该创建自己的属性和传递类型吗?