我试图在鼠标按下按钮时显示弹出菜单。当鼠标按下时,按钮应显示为按下状态,而当鼠标松开时,按钮应显示为“未按下”,无论选择了任何菜单项。类似于“Expose/Space Preference”面板中用于添加应用程序的“+”按钮。
到目前为止我尝试了3种方法:
单击按钮时发送操作。但这里弹出菜单出现在鼠标向上而不是鼠标向下时
子类化 NSButton 并覆盖 mouseDown:。鼠标按下时会出现弹出菜单,我可以选择任何菜单项。但是当弹出菜单消失时,按钮似乎被按下了。因此,我需要再次单击“取消按下”按钮,然后才能再次执行相同的操作。
NSEvent addLocalMonitorForEventsMatchingMask。与 2 类似的行为。
有什么建议吗?我想方法2或3是正确的方法,只需“取消按下”鼠标上的按钮即可。
最佳答案
相当古老的线程。但这是我最近面临的问题,所以如果允许我做出贡献......
就我而言,使用 NSPopupButton 不是一个选择。因为 NSPopupButton 创建了它自己的 NSMenu,我不需要它(而且我不知道如何让它消失)。
我找到了另一种方法。可以在不创建子类的情况下更改默认的 NSButton 行为。只需使用 NSControl 类的 -sendActionOn:
方法(在 -awakeFromNib
中的某个位置):
[_myButton sendActionOn:NSEventMaskLeftMouseDown];
现在,按钮的操作将在 mouseDown 事件上发送。 希望这会有所帮助。
关于cocoa - NSButton 鼠标按下事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3651767/