我在UIView
之上有一个UITableView
的子类。我使用UITableView
来显示一些数据,同时,我想覆盖手指后面的动画(例如,留下一条线索)。
如果我做得对,我需要UIView
子类和UITableView
处理两者的触摸事件。我怎样才能做到这一点?
是否有可能在UIView子类上触发touchesMoved
,然后在UITableView
上触发?
非常感谢您的帮助。
答案 0 :(得分:11)
我解决这个问题的方式不是那么干净,但它有效。如果有更好的方法,请告诉我。
我已为我的自定义hitTest
覆盖了UIView
,因此它会将触摸指向下方的UITableView
。然后在UITableView
我通过touchesBegan
,touchesMoved
等处理手势。我还在touchesBegan
上拨打UIView
。
这样,触摸由两个视图处理。
我没有反过来的原因(让UIView
touchesBegan
调用UITableView
的{{1}})是touchesBegan
上的手势识别器不行。
UITableView
子类'UIView
hitTest
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
// tview is the UITableView subclass instance
CGPoint tViewHit = [tView convertPoint:point fromView:self];
if ([tView pointInside:tViewHit withEvent:event]) return tView;
return [super hitTest:point withEvent:event];
}
子类的UITableView
touchesBegan
答案 1 :(得分:1)
不,你不能做到这一点。 Event Delivery章节说
窗口对象使用命中测试和响应者链来查找 查看接收触摸事件。在命中测试中,窗口调用 hitTest:withEvent:在视图层次结构的最顶层视图上;这个 方法通过递归调用pointInside:withEvent:on each 视图层次结构中的视图返回YES,继续向下 层次结构,直到找到触摸范围内的子视图 发生。该视图成为热门测试视图。
因此,当窗口找到触摸的视图时,它返回YES。目前只有一个视图可以处理触摸。
但是如果您需要为UITableView处理事件,那么为UIView处理它!您可以使用– convertPoint,– convertRect函数将触摸点转换为所需坐标,将子视图添加到UITableView并移动它取决于坐标和许多其他内容。
答案 2 :(得分:0)
UITableView将未处理的触摸事件传递给UIView。 (谷歌“响应链”) UITableView Documentation
因此,您只能在UIView中处理触摸事件。所以。在你的UIView
中touchesstart - 做初始化的东西
touchesmove - 在UIView上绘制尾部(使用timers / delayedresponse到desable点,使它看起来像一条小道)
touchesend - 做剩下的事情
希望这有帮助。