3

我试图在鼠标按下按钮时显示弹出菜单。该按钮应在鼠标按下时显示为按下,并且在鼠标按下时“未按下”,无论选择了任何菜单项。类似于用于添加应用程序的 Expose/Space Preference 面板“+”按钮。

到目前为止,我尝试了 3 种方法:

  1. 单击按钮时发送操作。但是这里弹出菜单出现在鼠标上而不是鼠标下

  2. 子类 NSButton 并覆盖 mouseDown:。弹出菜单出现在鼠标按下时,我可以选择任何菜单项。但是当弹出菜单消失时,按钮似乎被按下了。因此,我需要再次单击以“取消按下”按钮,然后才能再次获得相同的操作。

  3. NSEvent addLocalMonitorForEventsMatchingMask。与 2 类似的行为。

有什么建议吗?我猜方法 2 或 3 是正确的方法,只需要“取消按下”鼠标上的按钮。

4

3 回答 3

13

相当老的线程。但这是我最近面临的问题,所以如果我被允许贡献...

在我的情况下,使用 NSPopupButton 不是一种选择。因为 NSPopupButton 创建了它自己的 NSMenu 我不需要(而且我不知道如何让它消失)。

我找到了另一种方法。有可能在不继承它的情况下更改默认的 NSButton 行为。只需使用-sendActionOn:NSControl 类的方法(在某处-awakeFromNib):

[_myButton sendActionOn:NSEventMaskLeftMouseDown];

现在按钮的动作在 mouseDown 事件上发送。希望这可以帮助。

于 2013-03-07T11:05:06.143 回答
4

正如彼得所提到的,您可以使用 NSPopUpButton。不明显的是,您可以像使用 NSButton 一样配置按钮的样式、图像、标题等。

于 2010-09-06T22:20:20.777 回答
3

斯威夫特“语法”

myButton.sendAction(on: .leftMouseDown)

或者:

子类 NSButton:

class ButtonDown: NSButton {
    override func awakeFromNib() {
        super.awakeFromNib()

        self.sendAction(on: .leftMouseDown)
    }
}
于 2018-01-23T21:26:43.837 回答