我有一个UIView子类(CustomView
用于此问题),它有自己处理所有touches
个事件(开始,移动,结束,取消)。我还有一个UIButton
,它是CustomView
的兄弟,与之重叠。
例如,我的视图层次结构如下所示:
我希望CustomView在用户拖出UIButton后捕获触摸事件。通过调试日志记录,似乎UIControlEventTouchDragExit
事件是要截取的事件(尽管它不会触发,直到触摸距离按钮大约100个像素,但这对此问题并不重要。)
理想情况下,当触发拖动退出事件时,按钮将停止接收触摸移动事件,CustomView将获得touchesBegan
事件(即使我需要以某种方式假装自己),以及所有未来的触摸事件(touchesMoved
等)将被发送到CustomView。
我尝试了以下内容,但没有任何效果:
-(void)btnTouchDragExit:(id)sender
{
UIButton * btn = sender;
[btn resignFirstResponder];
[customView becomeFirstResponder];
}
我认为底层的UITouch
对象(在触摸事件中是一致的)不会被重定向到指向CustomView。我怎样才能达到预期的效果?
答案 0 :(得分:5)
只需使用hitTest:withEvent:找出“应该”接收事件的视图,然后将事件转发到适当的视图。在进入按钮之前,你可能需要做一些跳舞来拦截事件,但这就是hitTest:withEvent:是为了制作。
答案 1 :(得分:1)
你必须覆盖canBecomeFirstResponder
才能返回YES,否则becomeFirstResponder
什么都不做。这已在UIControl
上完成,但不在UIView
s