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

标签 cocoa nsbutton

setEnabled: 方法在我已重写 mouse{down,drag,up}NSButton 子类中不起作用,并且右键{向下、拖动、向上}。我觉得按钮的启用/禁用应该在这些功能之外——按钮在禁用时不应该首先接收鼠标事件。

当我覆盖这些函数时,我是否必须明确地进行检查?

最佳答案

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

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

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

关于cocoa - 即使启用为 NO,NSButton 子类仍然运行鼠标事件方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17459868/

相关文章:

objective-c - VLCKit : VLCMediaPlayerDelegate in a Cocoa Application

ios - 在 UITabBarController 中隐藏了 UINavigationController

macos - 如何删除或替换Interface Builder中自动添加的NSView?

objective-c - Cocoa,如何在 NSTextView 中选择文本

swift - NSControl 的 addTarget() 方法在哪里?

macos - 如何修改 NSButton 的外观以创建切换效果

objective-c - 拖动 View 中的项目

cocoa - 如何让披露按钮指向左右而不是上下?

objective-c - mouseDown 时禁用 mouseEntered 事件(NSEvents Mac)

swift - 快速移动 NSButton