Вопрос

У меня есть подкласс UIView (CustomView для целей этого вопроса), который имеет свою собственную обработку всех touches события (Начались, Перенесены, Закончились, Отменены).У меня также есть UIButton это родной брат CustomView это перекрывает все.

Например, моя иерархия представлений выглядит следующим образом:

  • UIView (представление контроллера)
    • Пользовательский вид с рамкой (0, 0, 300, 300)
    • UIButton с рамкой (0, 0, 100, 50)

Я бы хотел, чтобы CustomView фиксировал события касания после того, как пользователь вытащил UIButton.Через ведение журнала отладки выясняется, что UIControlEventTouchDragExit событие - это то, которое нужно перехватить (хотя оно не срабатывает до тех пор, пока касание не окажется на расстоянии около 100 пикселей от кнопки, но это не важно для этого вопроса).

В идеале, когда срабатывает событие drag exit, кнопка перестает получать события touch move, CustomView получает touchesBegan событие (даже если мне нужно как-то подделать его самому), и все будущие события касания (touchesMoved, и т.д.) будут отправлены в CustomView .

Я пробовал следующее, и это не возымело никакого эффекта:

-(void)btnTouchDragExit:(id)sender
{
    UIButton * btn = sender;
    [btn resignFirstResponder];
    [customView becomeFirstResponder];
}

Я думаю, что лежащий в основе UITouch объект (который согласован во всех событиях касания) не перенацеливается так, чтобы указывать на CustomView.Как я могу добиться желаемого эффекта?

Это было полезно?

Решение

Просто используйте hitTest:withEvent:чтобы выяснить, какое представление "должно" получать событие, затем перенаправьте событие в соответствующее представление.Возможно, вам придется немного поплясать, чтобы перехватить события до того, как они перейдут к кнопке, но это то, что hitTest:withEvent:был создан для.

Другие советы

вы должны переопределить canBecomeFirstResponder чтобы вернуть ДА в противном случае becomeFirstResponder ничего не делает.Это уже сделано на UIControls, но не на UIViews

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top