实现按住连续事件触发的优雅方式?

2024-03-02

我经常需要通过按住按钮来触发一系列事件。想一个+增加字段的按钮:点击它应该将其增加 1,但点击并按住应该每秒增加 1,直到释放按钮。另一个示例是在音频播放器类型应用程序中按住后退或前进按钮时的擦洗功能。

我通常采用以下策略:

  1. On touchDownInside我设置了一个具有所需间隔的重复计时器。
  2. On touchUpInside我使计时器无效并释放。

但对于每个这样的按钮,我需要一个单独的计时器实例变量、2 个目标操作和 2 个方法实现。 (这是假设我正在编写一个通用类并且不想对同时触摸的最大数量施加限制)。

有没有更优雅的方法来解决我所缺少的这个问题?


通过以下方式注册每个按钮的事件:

[button addTarget:self action:@selector(touchDown:withEvent:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(touchUpInside:withEvent:) forControlEvents:UIControlEventTouchUpInside];

对于每个按钮,设置tag属性:

button.tag = 1; // 2, 3, 4 ... etc

在处理程序中,执行您需要的任何操作。通过标签识别按钮:

- (IBAction) touchDown:(Button *)button withEvent:(UIEvent *) event
{
     NSLog("%d", button.tag);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现按住连续事件触发的优雅方式? 的相关文章

随机推荐

  • Laravel ORM从自引用表获取N级层次结构JSON

    我在用LARAVEL 4 with MySQL后端 我有一个self referencing带列的表id name type and parent Here parent is foreign key列的Id 表中数据如下 id name
  • 使用 Angular-CLI 安装第 3 方应用程序

    我是 angular cli 的新手 我想安装 npm 库 mdbootstrap 我按照这里的说明进行操作 Angular CLI 说明 https github com angular angular cli global librar
  • WebStorm错误:表达式语句不是赋值或调用

    我正在使用 WebStorm 但收到一个我无法理解的错误 Node js MongoDB var mongoose require mongoose mongoose Promise global Promise mongoose conn
  • 正确检查 nil sqlite 文本列

    我有一个分配给字符串的 sqlite 字符串列 我需要在分配之前确保它不为零 我正在这样做 char isNil sqlite3 column text selectstmt 2 if isNil nil myName NSString s
  • OS X Byobu 垂直分割

    我目前在 OS X 上使用 iTerm2 和 byobu 但我不知道如何在 OS X 上垂直分割屏幕 在 Linux 上 我可以使用 Ctrl F2 垂直分割屏幕 但在 OSX 上则不行 不行 这要归功于苹果的不同键盘 我用谷歌搜索了所有解
  • java 缓冲图像:检测黑色像素

    我有这个简单的代码来浏览 24 位彩色 Windows bmp 文件 BufferedImage mapa BMPDecoder read new File maps map bmp final int xmin mapa getMinX
  • 什么时候会发生下溢?

    我陷入了计算的情况1 77e 308 10触发下溢异常 但计算1 777e 308 10才不是 这很奇怪 因为 当浮点的真实结果发生下溢 操作的幅度小于 即接近于零 可表示为普通浮点数的最小值 目标数据类型 来自算术下溢 维基百科 换句话说
  • 三.js透明物体遮挡

    在 Three js 场景中 我希望有一个不可见的对象 但仍然遮挡场景中的其他对象 就好像它是可见的一样 这可以通过 Three js 库实现吗 这是一个例子 Suppose I have a three js scene that con
  • 在elasticsearch实例上打开开放的GCE防火墙以进行外部连接

    我刚刚使用 Click to Deploy 在 GCE 中创建了一个 elasticsearch 集群 但我只能使用隧道来访问它 就我而言 这不是一个选择 因为我不想向其他开发人员授予 gcloud 访问权限 我想为elasticsearc
  • 访问生成 T-SQL 中的 ROW_NUMBER() 等结果的查询

    MS Access 中有 ROW NUMBER 函数吗 如果有 请让我知道它的任何语法 因为我被困在这里 我尝试过论坛 但我得到了 sql server 语法 以下是我的查询 select ROW NUMBER OVER ORDER BY
  • OnClickListener 不适用于 GridView 中的第一项

    我在创建基于 GridView 的日历时遇到问题 这是网格 这应该是一个填充了事件的日历 因此我让我的适配器实现 OnClickListener 并为日历中的每个按钮设置该侦听器 它适用于每个按钮EXCEPT第一个 在本例中为 30 当我单
  • Java Web 应用程序“过期会话的事件监听器”

    有没有办法在运行Java代码之后HttpServletRequest Session已到期 如果会话过期 我需要进行数据库调用 回调和监听器将是有用的 javax servlet http HttpSessionListener The 雅
  • 包含修订历史记录的 CouchDB 视图

    我对 CouchDB 很陌生 已经缺少 SQL 了 无论如何 我需要创建一个视图来发出文档的一些属性以及所有修订 ID 像这样的东西 function doc if doc type template emit doc owner id d
  • VS Xaml 设计器错误

    我的 WPF 应用程序中的 Xaml 文件出现错误 我无法在 Visual Studio 设计器或 Blend 中看到我的控件 但是 该应用程序可以完美编译并运行 在 Blend 中 它说存在无效的 Xaml 并且该错误根本没有任何意义 但
  • 尝试将本地页面加载到 JavaFX webEngine 中

    我的 JavaFX 应用程序的选项卡上有一个 webView 组件 我正在尝试将本地存储的 HTML 页面加载到 WebView browser new WebView WebEngine webEngine browser getEngi
  • 监听附加端口 Microsoft Azure Nodejs

    我正在端口 process env PORT 1337 Microsoft Azure 上的默认端口 上运行 Nodejs 应用程序 Azure Web App 我还需要监听 websocket 的附加端口 在我本地 我使用的是 8000
  • 如何禁用 DateTimePicker 控件上的某些日期?

    如何禁用选定的日期DateTimePicker这样用户就无法选择它们 我知道这在 Web 窗体中是可能的 但在 Windows 窗体中我无法执行此操作 我怎样才能实现这个目标 您执行此操作的难易程度取决于您想要限制的日期 例如 如果您只想指
  • 如何从 Android 电话簿中选择联系号码到我的应用程序中?

    全部 我想从我的应用程序数据库中的android电话簿中获取号码 我已经用下面的代码尝试过 但这里正在获取人名 而不是我想要电话簿中的号码并希望将其存储在我的数据库中 如何实现这一目标 任何人都可以指导我 Override public v
  • 如何存储通用引用

    我需要在类中存储通用引用 我确信引用的值将比类的寿命更长 有这样做的规范方法吗 这是我想出的一个最小的例子 它似乎有效 但我不确定我是否做对了 template
  • 实现按住连续事件触发的优雅方式?

    我经常需要通过按住按钮来触发一系列事件 想一个 增加字段的按钮 点击它应该将其增加 1 但点击并按住应该每秒增加 1 直到释放按钮 另一个示例是在音频播放器类型应用程序中按住后退或前进按钮时的擦洗功能 我通常采用以下策略 On touchD