NSButton状态管理

时间:2018-08-19 10:44:37

标签: swift nsbutton nsbuttoncell

我的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中的按钮类型?该类型不传递给它。我应该创建自己的属性并通过类型吗?

0 个答案:

没有答案