Моя проблема: У меня есть супервизор EditView
, который занимает в основном весь кадр приложения, а subview MenuView
, который занимает только нижний ~ 20%, а затем MenuView
содержит свой собственный subview 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, которые не дали мне понять.
Спасибо!