我创建了一个包含两个UIButton
s的小型UIView
。该视图响应UITapGesture
事件。按钮应该会响应TouchUpInside
,但是当我点击按钮时,响应者是底层视图,轻击手势选择器被触发。寻找建议或建议。UIButton触摸事件落入底层视图
回答
每个UIView都有一个'exclusiveTouch'属性。如果它被设置为YES,则该视图不会将响应传递给响应者链。尝试在你的UIButtons上设置这个属性,看看这是否有所作为。
我会给这个镜头。 – Kyle 2011-03-04 15:37:02
这个设计的问题是,它类似于将一个按钮嵌入到另一个按钮。虽然您可能有合理的理由去做,但您应该更加注意事件流程。
在手势识别器到达子视图(您的案例中的两个按钮)之前,手势识别器会拦截触摸。您应该实现UIGestureRecognizerDelegate协议,即gestureRecognizer:shouldReceiveTouch:
方法,如果触摸位于两个按钮中的任何一个中,则返回NO。这将防止橙色视图篡改旨在用于按钮的触摸,并且按钮将按预期开始工作。
我想到了这一点,但即使动画(按钮上的蓝色闪光)显示按钮响应,对触摸作出响应的视图仍是底层视图。 – Kyle 2011-02-05 19:30:29
可以修改响应橙色视图点击手势的方法:
-(void) handleTapFrom:(UITapGestureRecognizer*) recognizer {
CGPoint location = [recognizer locationInView:orangeView];
UIView *hitView = [orangeView hitTest:location withEvent:nil];
if ([hitView isKindOfClass:[UIButton class]]) {
return;
}
//code that handle orange view tap
...
}
如果触摸一个UIButton这样,水龙头会由基础视图被忽略。
正确的答案(这可以防止劫持任何水龙头tabrecognizer和不需要你实现一个委托等)是found here。我通过this post得到了这个答案。
总之使用:
tapRecognizer.cancelsTouchesInView = NO;
“防止水龙头识别要抓住所有的 水龙头只有一个”
- 1. CALayers是否阻止底层视图中的触摸事件?
- 2. UIButton触摸事件重叠
- 3. UITapGestureRecognizer在子视图中阻止UIButton的触摸事件
- 4. 将UIView添加到UIButton子视图可防止触摸事件
- 5. iPad上的MPMediaPickerController - 底部视图不接受触摸事件
- 6. 地图视图触摸事件处理
- 7. UIScrollView和UIButton触摸侧事件冲突
- 8. 事件触摸结束了一个UIButton
- 9. 安卓:委托触摸事件垫层视图
- 10. 从触摸事件中获取视图
- 11. Monodroid - 拖动视图与触摸事件?
- 12. 捕捉子视图触摸事件
- 13. 只将触摸事件转发给正在触摸的视图
- 14. 检测底层元素的触摸
- 15. 如何处理UIButton上的触摸事件和手势事件?
- 16. 子视图中的UIButton不响应使用objective-c触摸事件
- 17. 触摸事件图形
- 18. UIViewController图像触摸事件
- 19. 覆盖视图,但仍然让底层视图接收事件
- 20. 混合图层图像上的触摸事件Android
- 21. 触摸事件
- 22. 将触摸事件从视图切换到其子视图
- 23. 检测触摸UIButton
- 24. 取消触摸它时的UIButton触摸
- 25. 触摸内部视图和外部按钮时触发事件
- 26. 如何接收视图层次结构中发生的所有触摸事件?
- 27. UWP web视图与“玻璃”层不接收指针/触摸事件
- 28. 忽略绝对定位视图触摸,允许在底层滚动型
- 29. 事件触摸屏轻轻触摸
- 30. Android测试,可视化触摸事件
我已经结束了什么做的是交易的UIButtons UIViews也有一个附加的轻拍手势识别器。这似乎按照我期望按钮的行为方式工作。 – Kyle 2011-02-07 16:14:06