即使启用NO,NSButton子类仍然运行鼠标事件方法

时间:2013-07-03 23:45:21

标签: cocoa nsbutton

setEnabled:方法在NSButton的子类中无效,我已覆盖mouse{down,drag,up}rightMouse{down,drag,up}。我觉得启用/禁用按钮应该在这些功能之外 - 当禁用按钮时,按钮不应该首先接收鼠标事件。

当我覆盖这些功能时,是否必须明确检查?

1 个答案:

答案 0 :(得分:2)

我认为您确实需要自己检查。

正如Apple's writeup on Cocoa Event Architechture中所述,包含按钮的窗口正在向您的按钮发送mouseDown:(或任何其他合适的方法)以响应接收事件。为了让窗口决定不发送消息,它必须首先确定该按钮是NSControl子类(enabledNSControl的属性,但不是{{ 1}})然后检查NSView标志。这超出了窗口的责任范围。启用的控件不是第一响应者状态的事件调度系统的一部分。

作为一个有趣的见解,如果你看一下GNUStep's -[NSControl mouseDown:] implementation,他们确实会在处理事件之前检查enabled