首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSButton鼠标事件

NSButton鼠标事件
EN

Stack Overflow用户
提问于 2010-09-06 13:18:50
回答 3查看 4.5K关注 0票数 3

我试着用鼠标在按钮上显示弹出式菜单。该按钮应显示按下鼠标,并被“不按”鼠标向上,无论任何菜单项被选中。类似于公开/空间首选项面板"+“按钮,用于添加应用程序。

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

当单击按钮时,

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

的行为

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-06 22:20:20

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

票数 4
EN

Stack Overflow用户

发布于 2013-03-07 11:05:06

一根很旧的线。但这是我最近面临的问题,所以如果允许我做贡献.

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

我找到了另一条路。可以更改默认的NSButton行为而不对其进行子类划分。只需使用NSControl类的NSControl方法(在-awakeFromNib中的某个位置):

代码语言:javascript
复制
[_myButton sendActionOn:NSEventMaskLeftMouseDown];

现在,按钮中的操作将在mouseDown事件上发送。希望这能有所帮助。

票数 13
EN

Stack Overflow用户

发布于 2018-01-23 21:26:43

Swift“语法”

代码语言:javascript
复制
myButton.sendAction(on: .leftMouseDown)

另一种选择是:

子类NSButton:

代码语言:javascript
复制
class ButtonDown: NSButton {
    override func awakeFromNib() {
        super.awakeFromNib()

        self.sendAction(on: .leftMouseDown)
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3651767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档