У меня есть подкласс UIView (CustomView
для целей этого вопроса), который имеет собственную обработку всех touches
событий (Begin, Moved, Ended, Cancelled). У меня также есть UIButton
, который является родным братом CustomView
, который перекрывает его.
Например, моя иерархия представлений выглядит следующим образом:
- UIView (вид контроллера)
- CustomView с рамкой (0, 0, 300, 300)
- UIBКнопка с рамкой (0, 0, 100, 50)
Я бы хотел, чтобы CustomView фиксировал сенсорные события после того, как пользователь вытащил из UIButton. При ведении журнала отладки выясняется, что перехватывается событие UIControlEventTouchDragExit
(хотя оно не срабатывает до тех пор, пока касание не будет на расстоянии около 100 пикселей от кнопки, но это не важно для этого вопроса).
В идеале, когда вызывается событие выхода при перетаскивании, кнопка прекращает получать события перемещения касанием, CustomView получает событие touchesBegan
(даже если мне нужно каким-то образом подделать одно), и все будущие события касания (touchesMoved
и т. Д.) Будут отправлены в CustomView.
Я пробовал следующее, и это не имеет никакого эффекта:
-(void)btnTouchDragExit:(id)sender
{
UIButton * btn = sender;
[btn resignFirstResponder];
[customView becomeFirstResponder];
}
Я думаю, что базовый объект UITouch
(который согласован для событий касания) не перенаправляется так, чтобы указывать на CustomView. Как мне добиться желаемого эффекта?