使用 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 上的触摸?