Моя проблема: у меня есть супервизор, EditView
который занимает в основном весь фрейм приложения, и подпредставление, MenuView
которое занимает только нижние ~ 20%, а затем MenuView
содержит собственное подпредставление, ButtonView
которое фактически находится за пределами MenuView
границ (что-то вроде этого:) ButtonView.frame.origin.y = -100
.
(примечание: EditView
есть другие подпредставления, которые не являются частью MenuView
иерархии представлений пользователя, но могут повлиять на ответ.)
Вероятно, вы уже знаете проблему: когда ButtonView
находится в пределах MenuView
(или, более конкретно, когда мои касания находятся в MenuView
пределах), ButtonView
реагирует на события касания. Когда мои касания выходят за MenuView
пределы (но все еще в ButtonView
пределах), событие касания не принимается ButtonView
.
Пример:
- (E) является
EditView
родителем всех представлений - (M) -
MenuView
это подвид EditView - (B) -
ButtonView
это подвид MenuView
Диаграмма:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
Поскольку (B) находится за пределами кадра (M), касание в области (B) никогда не будет отправлено на (M) - фактически, (M) никогда не анализирует касание в этом случае, и касание отправляется на следующий объект в иерархии.
Цель: я полагаю, что переопределение hitTest:withEvent:
может решить эту проблему, но я не понимаю, как именно. В моем случае следует hitTest:withEvent:
переопределить в EditView
(моем «главном» супервизоре)? Или его следует переопределить в MenuView
прямом наблюдении за кнопкой, которая не получает касаний? Или я неправильно об этом думаю?
Если для этого требуется подробное объяснение, будет полезен хороший онлайн-ресурс - за исключением документации Apple UIView, в которой мне неясно.
Благодарность!