我有一个 UIView 子类(CustomView
出于这个问题的目的)它有自己的所有处理touches
事件(开始、移动、结束、取消)。我也有一个UIButton
这是一个兄弟姐妹CustomView
与它重叠的。
例如,我的视图层次结构如下所示:
- UIView (Controller's view)
- 带框架的 CustomView (0, 0, 300, 300)
- 带框架的 UIButton (0, 0, 100, 50)
我希望 CustomView 在用户拖出 UIButton 后捕获触摸事件。通过调试日志记录,似乎UIControlEventTouchDragExit
event 是要拦截的事件(尽管直到触摸距离按钮大约 100 像素时它才会触发,但这对于这个问题并不重要)。
理想情况下,当触发拖动退出事件时,按钮将停止接收触摸移动事件,CustomView 将获得touchesBegan
事件(即使我需要以某种方式伪造一个事件),以及所有未来的触摸事件(touchesMoved
等)将被发送到 CustomView。
我已经尝试过以下方法,但没有任何效果:
-(void)btnTouchDragExit:(id)sender
{
UIButton * btn = sender;
[btn resignFirstResponder];
[customView becomeFirstResponder];
}
我认为底层UITouch
对象(在触摸事件中保持一致)不会被重定向为指向 CustomView。怎样才能达到想要的效果呢?
只需使用 hitTest:withEvent: 来确定哪个视图“应该”接收事件,然后将事件转发到适当的视图。在事件到达按钮之前,您可能需要做一些操作来拦截事件,但这就是 hitTest:withEvent: 的用途。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)