在xCode中处理多个对象的长按的最佳方法

Posted

技术标签:

【中文标题】在xCode中处理多个对象的长按的最佳方法【英文标题】:Best way to handle long press for multiple objects in xCode 【发布时间】:2014-05-07 18:01:45 【问题描述】:

我有一个包含 64 个 UIButtons 的视图,除了它们的触摸事件之外,它们还需要响应长按。我想我可以通过在我的 xib 中创建一个 UILongPressRecognizer 轻松做到这一点,将所有按钮连接到插座集合中的识别器,然后在处理程序中测试按钮的标签。在这里,我连接了前 3 个按钮...

这是我的处理程序...

- (IBAction)handleLongPress:(UILongPressGestureRecognizer *)sender 
    NSLog(@"%i", sender.view.tag);


按钮从 1-32 和 101-132 标记,但我只获得集合中第一个按钮的标记。如果第一个按钮是标签 1,那么所有三个按钮都会在处理程序中返回 1,如果我将它们从 3 连接到 1,则处理程序将 3 作为所有三个按钮的标签。

所有按钮都有相同的标题,如您所见,这是一个句点。我认为这不会有什么不同。

如何在不创建 64 个 longPressRecognizer 的情况下处理每个按钮的长按?

谢谢,

约翰

【问题讨论】:

还没有弄清楚如何使用按钮的标签值,所以我继续使用长按的位置。如果可能的话,仍然想知道如何使用按钮标签来做到这一点。 【参考方案1】:

你可以使用

 CGPoint tapPoint = [sender locationInView:screenView];

检查按钮是否被按下。

【讨论】:

谢谢,但我想使用水龙头位置以外的其他东西,因为将来位置可能会发生变化。标签似乎是唯一的可能性。根据我的谷歌搜索以及对这个发布的问题的缺乏回应,看起来与该职位合作是我唯一的选择。 [sender tag]而不是sender.view.tag的值是什么? sender 是一个 UIGestureRecognizerStateBegan,它没有 tag 属性,所以 [sender tag] 会抛出一个无法识别的选择器异常。只有它的视图有标签属性。 显然我的意思是 UIGestureRecognizer。

以上是关于在xCode中处理多个对象的长按的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何只屏蔽headerView上的长按事件

禁用智能手机上的长按

单纯使用js或者jq如何实现 手机web的长按事件 和按键事件

h5移动端阻止浏览器长按事件

[ 视频 ] iPhone上 Safari 长按的小技巧你知道多少

UICollectionView 中的长按和平移手势