使用 UIButton 进行触摸检测

Posted

技术标签:

【中文标题】使用 UIButton 进行触摸检测【英文标题】:Touch detection with UIButton 【发布时间】:2011-07-15 20:12:27 【问题描述】:

我在使用UIButton 操作和touchesmoved 时遇到问题。场景是,当我在一系列按钮上拖动手指时,应该调用它的动作。我也可以单独触摸按钮。

我使用touchesmoved方法找出uibutton上的触摸点来触发它的动作。这种方法的问题是,当我点击视图中的某个位置并将手指移到按钮上时,一切正常,但如果我开始触摸 UIButton 本身 touchesmoved 方法不会被调用。

【问题讨论】:

听起来你在包含所有按钮的 UIView 中实现了 touchesMoved。所以视图有一个 touchesMoved 的实现。现在,当您从按钮开始时,该按钮没有 touchesMoved 实例,因此它不会调用任何函数,也不会发生任何事情。 【参考方案1】:

检查下面,将对您有所帮助。

Handling touch events for UIButtons in iPhone

Is there a way to pass touches through on the iPhone?

touchesBegin & touchesMove Xcode Obj C Question

【讨论】:

谢谢,我已经使用第二个链接来传递触摸事件。像魅力一样工作。【参考方案2】:

如果您不需要知道触摸的确切位置,只需在他们滑过它时,您就可以为其添加一个目标并使用众多 UIControlEvents 之一,例如 UIControlEventTouchDragInside 等。

这是来自UIControl.h的完整枚举

enum 
    UIControlEventTouchDown           = 1 <<  0,      // on all touch downs
    UIControlEventTouchDownRepeat     = 1 <<  1,      // on multiple touchdowns (tap count > 1)
    UIControlEventTouchDragInside     = 1 <<  2,
    UIControlEventTouchDragOutside    = 1 <<  3,
    UIControlEventTouchDragEnter      = 1 <<  4,
    UIControlEventTouchDragExit       = 1 <<  5,
    UIControlEventTouchUpInside       = 1 <<  6,
    UIControlEventTouchUpOutside      = 1 <<  7,
    UIControlEventTouchCancel         = 1 <<  8,

    UIControlEventValueChanged        = 1 << 12,     // sliders, etc.

    UIControlEventEditingDidBegin     = 1 << 16,     // UITextField
    UIControlEventEditingChanged      = 1 << 17,
    UIControlEventEditingDidEnd       = 1 << 18,
    UIControlEventEditingDidEndOnExit = 1 << 19,     // 'return key' ending editing

    UIControlEventAllTouchEvents      = 0x00000FFF,  // for touch events
    UIControlEventAllEditingEvents    = 0x000F0000,  // for UITextField
    UIControlEventApplicationReserved = 0x0F000000,  // range available for application use
    UIControlEventSystemReserved      = 0xF0000000,  // range reserved for internal framework use
    UIControlEventAllEvents           = 0xFFFFFFFF
;
typedef NSUInteger UIControlEvents;

【讨论】:

感谢您花时间回答问题。我解决了我的问题。

以上是关于使用 UIButton 进行触摸检测的主要内容,如果未能解决你的问题,请参考以下文章

检测触摸何时开始在屏幕上的任何位置,即使是在 UIButton 上

如何检测 UIView 上的触摸并检测单击哪个 UIView 类似于 UIButton 上的触摸?

检测 UIButton 触摸子视图

未检测到 UIToolBar 上 UIToolBar 上的模态视图中的 UIButton 触摸未检测到

在 UICollectionView 底部加载其他单元格

防止多点触控的 UIButton 触摸事件