是否可以处理 UIButton 发生的触摸,然后将其传递给下一个响应者?
问问题
2425 次
1 回答
2
编辑
一个有效的方法也是覆盖的touchesEnded:withEvent:
方法UIResponder
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
// handle touch
[super touchesEnded:touches withEvent:event];
}
从文档中:
此方法的默认实现什么也不做。然而,直接的 UIKit 子类
UIResponder
,特别是UIView
,将消息转发到响应者链。要将消息转发给下一个响应者,请将消息发送到super
(超类实现);不要将消息直接发送给下一个响应者。
原始答案
为了确定UIView
视图层次结构中的哪个应该接收触摸,使用该方法-[UIView hitTest:withEvent:]
。根据文档:
该方法通过调用
pointInside:withEvent:
每个子视图的方法来遍历视图层次结构,以确定哪个子视图应该接收触摸事件。如果pointInside:withEvent:
返回YES
,则类似地遍历子视图的层次结构,直到找到包含指定点的最前面的视图。如果视图不包含该点,则忽略其视图层次结构的分支。
所以一种方法可能是创建一个UIButton
子类并覆盖该方法-pointInside:withEvent:
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
if (CGRectContainsPoint(self.bounds, point) {
// The touch is within the button's bounds
}
return NO;
}
这将为您提供在按钮范围内处理触摸的机会,但同时返回NO
将使命中测试失败,从而在视图层次结构中传递触摸。
于 2013-10-30T16:31:23.420 回答