【问题标题】:Making draggable UIButton respond to touch events properly使可拖动的 UIButton 正确响应触摸事件
【发布时间】:2013-09-26 23:55:57
【问题描述】:
我的应用中有一个可拖动的UIButton。我希望能够对UIControlEventTouchUpInside 执行操作。这很好用。但是,如果用户拖动按钮然后从屏幕上抬起手指,我不希望它触发(此时触发依赖于UIControlEventTouchUpInside 的操作)。
有什么方法可以设置我的按钮的触摸事件侦听器,以便在 TouchUpInside 上触发事件,但前提是按钮没有被拖动?
【问题讨论】:
标签:
ios
objective-c
cocoa-touch
uibutton
【解决方案1】:
你必须继承一个 UIButton,然后覆盖:
- touchesMoved
- touchesEnded
在 Moved 方法中,将 move 标志设置为 true,在 Ended 方法中,检查该标志。如果为真,请致电超级。否则,将其重定向到 touchDidCanceled。
顺便说一句,如果您向我们展示如何使用手势识别器制作可拖动按钮会更好?
【解决方案2】:
你也可以这样做,将 UIButton 作为 UIView 的子视图。
现在为 uibutton 设置 touchUpInside 并在 UIView 上添加 panGuesture。
这就是内部的修饰和拖动永远不会搞砸的方式。