我有一个 UIView 子类(CustomView
出于这个问题的目的),它自己处理所有touches
事件(开始、移动、结束、取消)。我也有一个与它重叠UIButton
的兄弟。CustomView
例如,我的视图层次结构如下所示:
- UIView(控制器的视图)
- 带框架的自定义视图(0、0、300、300)
- 带框架的 UIButton (0, 0, 100, 50)
一旦用户拖出 UIButton,我希望 CustomView 捕获触摸事件。通过调试日志,似乎该UIControlEventTouchDragExit
事件是要拦截的事件(尽管直到触摸距离按钮大约 100 像素时它才会触发,但这对于这个问题并不重要)。
理想情况下,当拖动退出事件被触发时,按钮将停止接收触摸移动事件,CustomView 将收到一个touchesBegan
事件(即使我需要以某种方式自己伪造一个),并且所有未来的触摸事件(touchesMoved
等)都将发送到自定义视图。
我尝试了以下方法,但没有任何效果:
-(void)btnTouchDragExit:(id)sender
{
UIButton * btn = sender;
[btn resignFirstResponder];
[customView becomeFirstResponder];
}
我认为底层UITouch
对象(在触摸事件中是一致的)没有被重新定位为指向 CustomView。我怎样才能达到预期的效果?