0

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) .momentaryChange2) .pushOnPushOff。我期待根据按钮类型,状态会改变或不改变。但无论我使用什么设置setButtonType,单元格的 .state 成员总是在按下按钮时发生变化。

我是否理解正确,我有责任检查按钮的类型并考虑或不考虑.state?难道是按钮类型的某些组合会告诉单元格在使用瞬时类型时bezelStyle在内部忽略吗?.state

如果我必须检查按钮类型,那么我如何检查类型NSButtonCell?类型不会传递给它。我应该创建自己的属性和传递类型吗?

4

0 回答 0