La mia applicazione tende a perdere la traccia di ciò che il risponditore dovrebbe gestire un evento touch.L'evento UIButton non è stato gestito per l'1% del tempo: chi dovrei incolpare nella mia catena di risposta?
La mia situazione:
- un file XIB che definisce 3 guardati:
- un punto di vista come vista del proprietario del file Visto
- 2 extra che vengono aggiunti alla gerarchia di visualizzazione a livello di codice
- Una delle sottoview (SubviewA) ha un
UIButton
, configurato per inviare il selettoremyAction:
alloFirstResponder
quando un viene rilevato "Touch Up Inside" evento - SubviewA sa come gestire
myAction:
99% del tempo, tutto va bene. Quando l'utente tocca il pulsante, SubviewA si prende cura del messaggio myAction:
e tutto va bene. Ma di tanto in tanto, gli utenti si lamentano che il pulsante "si blocca" e in realtà l'ho riprodotto io stesso un paio di volte senza essere in grado di trovare uno scenario chiaro per farlo accadere su richiesta.
La mia indagine finora è:
- quando non succede nulla quando si tocca il tasto:
- mio pulsante rileva il rubinetto causa che viene evidenziato quando viene premuto
myAction:
non è invitato SubviewA- il resto dell'interfaccia utente rimane reattivo
Il codice di cui sto parlando è un codice legacy che sto cercando di risolvere. Avere una vista che risponde a un evento per una delle sue sottoview suona come un'architettura bizzarra per me. Finora, ho sempre utilizzato il proprietario del file per occuparmi degli eventi touch, quindi ho sottolineato che la catena di risponditori è l'ideale responsabile del bug. Ma non riesco a trovare il perché! Da quanto ho capito, poiché il pulsante non sa come gestire il messaggio e non ha alcun controller di visualizzazione collegato, dovrebbe inoltrarlo alla sua superview (ButtonA, che sa come gestirlo)!
Le mie domande sono:
- alcuna idea di dove il bug potrebbe venire da? (catena di risposta?)
- qualsiasi commento sul fatto che una vista debba gestire i propri comportamenti dei pulsanti stessi o se un controller di visualizzazione debba eseguirlo?
Edit: Ho un'idea su come risolvere il bug: filo il pulsante di azione dritto al SubviewA invece di usare firstResponder all'interno di Interface Builder. Il motivo per cui ho postato questa domanda è cercare di capire perché la catena di risposta non funziona di tanto in tanto.
Sii bello vedere il codice ... – tarmes
Non è coinvolto il codice .m: solo file XIB, che non sono veramente facili da condividere. –