有条件地防止NSButton行动

时间:2017-07-05 15:48:57

标签: macos appkit nsbutton

我有一对复选框,NSButton实例,我想阻止用户取消选择它们。可以选中任一按钮,也可以同时检查两者,但绝不应该取消选中这两个按钮。

如何拦截点击事件并测试它是否是唯一检查的按钮?如果我将状态设置回IBAction中的检查状态,则切换为未选中,然后选中。我不想要这个。我想在这种情况下忽略鼠标点击。

我也不希望它被禁用,或者至少不要显示为灰色。这会让用户感到困惑。

我认为会有一个像NSTextFieldDelegate这样的代理类型的shouldChangeState类型方法,但我没有在任何地方看到它。

这似乎是一个非常基本的问题,但我无法找到让我感到满意的答案。

1 个答案:

答案 0 :(得分:0)

  

this post下查看我的答案

子类NSButton并覆盖mouseDown函数

不幸的是,.action也无法正常工作(您需要手动实现点击识别器)

class RadioButton: NSButton {
    override func mouseDown(with event: NSEvent) {}
}

如果该块只是有条件的,则可以执行以下操作:

class RadioButton: NSButton {
    override func mouseDown(with event: NSEvent) {
        if condition {
            super.mouseDown(event)
        }
    }
}