UIPicker applicazione si blocca se ti filo un componente allo stesso tempo come un altro
-
19-09-2019 - |
Domanda
Ho un selettore a tre componenti.
I primi due componenti dipendono l'ultimo.
Quindi potrebbe essere:
- | 5 | M (Le linee rappresentano le diverse colonne) o 1" | 5" | FT
Se io sto muovendo la seconda o prima colonna e prima di smettere di girare mi sposto la terza colonna da da FT a M o viceversa e poi mentre ciò che è ancora in movimento si blocca l'applicazione.
So che questo sta accadendo perché nel metodo delegato pickerView:didSelectRow:inComponent:
per l'UIPicker sto eseguendo un calcolo basato sul valore finale della terza colonna cioè M o FT.
SO, in poche parole
Si sta eseguendo il pickerView:didSelectRow:inComponent:
sulla terza colonna prima della prima colonna, anche se gli utenti li toccati in ordine inverso.
C'è un modo per risolvere questo?
Forse fare in modo che se un componente è ancora girando l'utente è in grado di spostare un altro componente?
Ogni aiuto è molto apprezzato
Grazie
Tom
Soluzione
Credo che mentre un componente è in rotazione non ha alcun valore selezionato in modo che non chiama mai pickerView:didSelectRow:inComponent:
Una volta che si ferma a girare lo fa inviare il messaggio al delegato. Il primo componente di arrestare la rotazione invia prima, non è il primo componente ha toccato. Questo è il motivo per cui la tua terza colonna chiama il metodo prima che i primi due, anche se viene toccato per ultimo.
I sospetto l'incidente è causato dal tentativo di eseguire un'operazione usando l'nil selezionato valore di riga di un componente mobile. Se è così, si può evitare l'incidente testando che ogni valore componenti selezionato non è pari a zero prima di eseguire l'operazione. Se i componenti sono ancora girano allora si dovrebbe saltare l'operazione fino a quando non si fermano.
Non credo sia possibile congelare i componenti.
Altri suggerimenti
Si può "congelare" i componenti mettendo UIViews chiare sopra la parte superiore di loro. Non appena un componente inizia a girare è possibile mostrare il punto di vista chiaro per evitare interazione con l'utente sugli altri componenti.
Questo dovrebbe fermare questo problema si verifichi.