Il mio problema: ho una superview EditViewche occupa praticamente l'intero frame dell'applicazione e una sottoview MenuViewche occupa solo il 20% inferiore, e quindi MenuViewcontiene la propria sottoview ButtonViewche risiede effettivamente al di fuori dei MenuViewlimiti di s (qualcosa del genere :) ButtonView.frame.origin.y = -100.
(nota: EditViewha altre viste secondarie che non fanno parte della MenuViewgerarchia delle viste di, ma possono influire sulla risposta.)
Probabilmente conosci già il problema: quando si ButtonViewtrova nei limiti di MenuView(o, più specificamente, quando i miei tocchi sono entro MenuViewi limiti), ButtonViewrisponde agli eventi di tocco. Quando i miei tocchi sono fuori MenuViewdai limiti di (ma ancora entro ButtonViewi limiti di), nessun evento di tocco viene ricevuto da ButtonView.
Esempio:
- (E) è
EditViewil genitore di tutte le visualizzazioni - (M) è
MenuViewuna sottoview di EditView - (B) è
ButtonViewuna sottoview di MenuView
Diagramma:
+------------------------------+
|E |
| |
| |
| |
| |
|+-----+ |
||B | |
|+-----+ |
|+----------------------------+|
||M ||
|| ||
|+----------------------------+|
+------------------------------+
Poiché (B) è al di fuori della cornice di (M), un tocco nella regione (B) non verrà mai inviato a (M) - in effetti, (M) non analizza mai il tocco in questo caso, e il tocco viene inviato a il prossimo oggetto nella gerarchia.
Obiettivo: immagino che l'override hitTest:withEvent:possa risolvere questo problema, ma non capisco esattamente come. Nel mio caso, dovrebbe hitTest:withEvent:essere sovrascritto in EditView(la mia superview "principale")? O dovrebbe essere sovrascritto nella visualizzazione MenuViewdiretta del pulsante che non riceve i tocchi? O sto pensando a questo in modo errato?
Se ciò richiede una lunga spiegazione, una buona risorsa online sarebbe utile, ad eccezione dei documenti UIView di Apple, che non mi hanno chiarito.
Grazie!