Meu problema: eu tenho uma supervisualização EditViewque ocupa basicamente todo o quadro do aplicativo e uma subvisualização MenuViewque ocupa apenas ~ 20% da parte inferior, e então MenuViewcontém sua própria subvisualização ButtonViewque na verdade reside fora dos MenuViewlimites de (algo como isto ButtonView.frame.origin.y = -100:).
(observação: EditViewpossui outras subvisualizações que não fazem parte da MenuViewhierarquia de visões de, mas podem afetar a resposta.)
Você provavelmente já conhece o problema: quando ButtonViewestá dentro dos limites de MenuView(ou, mais especificamente, quando meus toques estão dentro MenuViewdos limites de), ButtonViewresponde a eventos de toque. Quando meus toques estão fora dos MenuViewlimites de (mas ainda dentro ButtonViewdos limites de), nenhum evento de toque é recebido por ButtonView.
Exemplo:
- (E) é
EditView, o pai de todas as visualizações - (M) é
MenuViewuma subvisão de EditView - (B) é
ButtonViewuma 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 MenuViewvisualizaçã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!