Swift中的NSButton,处理单击和释放事件

凯兹

我试图管理OS X应用程序上一个简单按钮的不同状态:当用户单击它时,以及用户释放单击时。

目前我通过NSMomentaryLightButton设置我的按钮类型

NSMomentaryLightButton单击按钮(处于打开状态)时,它显示为点亮状态。如果按钮带有边框,则它也可能会凹陷。释放按钮后,它将返回其正常(关闭)状态。

这种类型的按钮最​​适合简单触发操作,因为它不显示其状态。它总是显示其正常图像或标题。该选项在Interface Builder的Button检查器中称为Momentary Light。

我以为这是个好方法,但是当我打印按钮状态时,它就像是切换按钮,而不是我设置的按钮。如您在示例gif上看到的

综上所述,我如何才能拥有真正的按钮行为?用户单击时以及释放用户单击时调用该函数。

谢,

BaseZen

您不想使用按钮作为钢琴键。首先,它们是非矩形的,它们不像按钮那样起作用:既不是单动按钮也不是拨动开关。您正在以自定义方式与自定义视图进行交互,这意味着NSButton不需要控件层次结构。相反,您是在子类化NSView和捕获低级鼠标事件,如此处所述:

https://developer.apple.com/library/prerelease/content/documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html#//apple_ref/doc/uid/10000060i-CH6-SW1

您在自己的评论中详细介绍了您自己的想法,但是我想确保您有更高层次的观点。它甚至可以,并且可能是最好的,整合所有的钢琴键的成单一视图,并让自己使用呈现的按键NSBezierPath,并使用执行鼠标点击检测containsPoint

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSBezierPath_Class/#//apple_ref/occ/instm/NSBezierPath/containsPoint

这是很多工作,但是进行真正专业外观的钢琴模拟的唯一方法。然后,您可以使用所需的轮廓,填充和标签来呈现键,而不受内置按钮形状和布局的限制。例如,您甚至可以使按键的底部边缘稍微变圆,或者应用闪亮的纹理。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift中的NSButton,处理单击和释放事件

来自分类Dev

使用Swift进行Xcode 6中的NSButton事件处理

来自分类Dev

PyQt按钮单击和释放处理程序

来自分类Dev

如何使用SWIFT处理导航栏中BackBarButtonItem的单击事件?

来自分类Dev

UWP按钮的按下和释放事件处理程序

来自分类Dev

处理多个按钮和多个单击事件

来自分类Dev

如何释放其事件处理程序中的对象?

来自分类Dev

处理VueJS中的DOM元素单击事件

来自分类Dev

单击事件处理程序中的 SetInterval 方法

来自分类Dev

Swift 3单击后立即隐藏NSButton

来自分类Dev

处理HelpButton单击事件?

来自分类Dev

单击事件处理程序

来自分类Dev

在C中处理错误和释放内存的正确方法

来自分类Dev

在C中处理错误和释放内存的正确方法

来自分类Dev

IE10事件处理,用于按钮单击和键入

来自分类Dev

单击后在NSTableCellView中更改NSButton的文本

来自分类Dev

在SWIFT中处理UIActionSheet上的事件

来自分类Dev

如何在vue.js中的父元素和子元素之间隔离单击事件处理程序

来自分类Dev

为什么在 Firefox、Safari 和 Internet Explorer 中不支持单击处理程序事件 SVG 元素?

来自分类Dev

在 VBA 中的不同按钮单击事件中使用按钮单击事件处理程序

来自分类Dev

Webgrid中的单击事件处理程序不起作用

来自分类Dev

Android Studio中是否存在“单击时”事件处理程序?

来自分类Dev

如何处理流星中的按钮单击事件?

来自分类Dev

处理单个文件Vue组件中的单击事件的正确方法

来自分类Dev

在ViewPager中以负页边距处理单击事件

来自分类Dev

处理引导程序翻转卡中的单击事件

来自分类Dev

从ListViewItem单击处理程序中的事件args获取数据

来自分类Dev

Backbone / Handlebars / Bootstrap设置中的按钮单击事件处理

来自分类Dev

无法处理jqGrid中的复选框单击事件

Related 相关文章

  1. 1

    Swift中的NSButton,处理单击和释放事件

  2. 2

    使用Swift进行Xcode 6中的NSButton事件处理

  3. 3

    PyQt按钮单击和释放处理程序

  4. 4

    如何使用SWIFT处理导航栏中BackBarButtonItem的单击事件?

  5. 5

    UWP按钮的按下和释放事件处理程序

  6. 6

    处理多个按钮和多个单击事件

  7. 7

    如何释放其事件处理程序中的对象?

  8. 8

    处理VueJS中的DOM元素单击事件

  9. 9

    单击事件处理程序中的 SetInterval 方法

  10. 10

    Swift 3单击后立即隐藏NSButton

  11. 11

    处理HelpButton单击事件?

  12. 12

    单击事件处理程序

  13. 13

    在C中处理错误和释放内存的正确方法

  14. 14

    在C中处理错误和释放内存的正确方法

  15. 15

    IE10事件处理,用于按钮单击和键入

  16. 16

    单击后在NSTableCellView中更改NSButton的文本

  17. 17

    在SWIFT中处理UIActionSheet上的事件

  18. 18

    如何在vue.js中的父元素和子元素之间隔离单击事件处理程序

  19. 19

    为什么在 Firefox、Safari 和 Internet Explorer 中不支持单击处理程序事件 SVG 元素?

  20. 20

    在 VBA 中的不同按钮单击事件中使用按钮单击事件处理程序

  21. 21

    Webgrid中的单击事件处理程序不起作用

  22. 22

    Android Studio中是否存在“单击时”事件处理程序?

  23. 23

    如何处理流星中的按钮单击事件?

  24. 24

    处理单个文件Vue组件中的单击事件的正确方法

  25. 25

    在ViewPager中以负页边距处理单击事件

  26. 26

    处理引导程序翻转卡中的单击事件

  27. 27

    从ListViewItem单击处理程序中的事件args获取数据

  28. 28

    Backbone / Handlebars / Bootstrap设置中的按钮单击事件处理

  29. 29

    无法处理jqGrid中的复选框单击事件

热门标签

归档