Meu problema: eu tenho uma supervisualização EditView
que ocupa basicamente todo o quadro do aplicativo e uma subvisualização MenuView
que ocupa apenas ~ 20% da parte inferior, e então MenuView
contém sua própria subvisualização ButtonView
que na verdade reside fora dos MenuView
limites de (algo como isto ButtonView.frame.origin.y = -100
:).
(observação: EditView
possui outras subvisualizações que não fazem parte da MenuView
hierarquia de visões de, mas podem afetar a resposta.)
Você provavelmente já conhece o problema: quando ButtonView
está dentro dos limites de MenuView
(ou, mais especificamente, quando meus toques estão dentro MenuView
dos limites de), ButtonView
responde a eventos de toque. Quando meus toques estão fora dos MenuView
limites de (mas ainda dentro ButtonView
dos limites de), nenhum evento de toque é recebido por ButtonView
.
Exemplo:
- (E) é
EditView
, o pai de todas as visualizações - (M) é
MenuView
uma subvisão de EditView - (B) é
ButtonView
uma subvisão do MenuView
Diagrama:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
Como (B) está fora do quadro de (M), um toque na região (B) nunca será enviado para (M) - na verdade, (M) nunca analisa o toque neste caso, e o toque é enviado para o próximo objeto na hierarquia.
Objetivo: presumo que substituir hitTest:withEvent:
pode resolver esse problema, mas não entendo exatamente como. No meu caso, deve hitTest:withEvent:
ser sobrescrito em EditView
(minha supervisão 'master')? Ou deveria ser sobrescrito na MenuView
visualização direta do botão que não está recebendo toques? Ou estou pensando sobre isso incorretamente?
Se isso exigir uma explicação longa, um bom recurso online seria útil - exceto os documentos UIView da Apple, que não deixaram isso claro para mim.
Obrigado!