NSButton Mousedown活动

问题描述 投票:3回答:3

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

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

  1. 单击按钮时发送操作。但是这里弹出菜单出现在鼠标上而不是鼠标按下
  2. 子类NSButton并覆盖mouseDown:。鼠标按下时出现弹出菜单,我可以选择任何菜单项。但是当弹出菜单消失时,按钮出现了按下状态。因此,我需要再次单击以“取消”按钮,然后才能再次执行相同的操作。
  3. NSEvent addLocalMonitorForEventsMatchingMask。类似的行为2。

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

cocoa appkit nsevent
3个回答
4
投票

正如Peter所说,你可以使用NSPopUpButton。不显而易见的是,您可以像使用NSButton一样配置按钮的样式,图像,标题等。


12
投票

相当旧的线程。但这是我最近遇到的问题,所以如果我被允许捐款......

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

我发现了另一种方式。有可能在没有子类化的情况下更改默认的NSButton行为。只需使用NSControl类的-sendActionOn:方法(在-awakeFromNib中的某个地方):

[_myButton sendActionOn:NSEventMaskLeftMouseDown];

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


3
投票

斯威夫特“语法”

myButton.sendAction(on: .leftMouseDown)

或者:

子类NSButton:

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

        self.sendAction(on: .leftMouseDown)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.