setEnabled:
方法在我已重写 mouse{down,drag,up}
的 NSButton
子类中不起作用,并且右键{向下、拖动、向上}
。我觉得按钮的启用/禁用应该在这些功能之外——按钮在禁用时不应该首先接收鼠标事件。
当我覆盖这些函数时,我是否必须明确地进行检查?
最佳答案
我认为您确实需要自己检查。
如 Apple's writeup on Cocoa Event Architechture 中所述,包含您的按钮的窗口正在向您的按钮发送 mouseDown:
(或任何其他合适的方法)以响应接收事件。为了让窗口决定不发送消息,它必须首先确定该按钮是 NSControl
子类(enabled
是 NSControl 的属性)
,但不是 NSView
),然后检查 enabled
标志。这超出了窗口的责任范围。正在启用的控件不像第一响应者状态那样属于事件调度系统的一部分。
作为一个有趣的见解,如果您看一下 GNUStep's -[NSControl mouseDown:]
implementation ,他们确实在处理事件之前检查[self isEnabled]
。
关于cocoa - 即使启用为 NO,NSButton 子类仍然运行鼠标事件方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459868/