Il mio problema: ho una superview EditView
che occupa praticamente l'intero frame dell'applicazione e una sottoview MenuView
che occupa solo il 20% inferiore, e quindi MenuView
contiene la propria sottoview ButtonView
che risiede effettivamente al di fuori dei MenuView
limiti di s (qualcosa del genere :) ButtonView.frame.origin.y = -100
.
(nota: EditView
ha altre viste secondarie che non fanno parte della MenuView
gerarchia delle viste di, ma possono influire sulla risposta.)
Probabilmente conosci già il problema: quando si ButtonView
trova nei limiti di MenuView
(o, più specificamente, quando i miei tocchi sono entro MenuView
i limiti), ButtonView
risponde agli eventi di tocco. Quando i miei tocchi sono fuori MenuView
dai limiti di (ma ancora entro ButtonView
i limiti di), nessun evento di tocco viene ricevuto da ButtonView
.
Esempio:
- (E) è
EditView
il genitore di tutte le visualizzazioni - (M) è
MenuView
una sottoview di EditView - (B) è
ButtonView
una 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 MenuView
diretta 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!