UIPicker applicazione si blocca se ti filo un componente allo stesso tempo come un altro

StackOverflow https://stackoverflow.com/questions/2015227

  •  19-09-2019
  •  | 
  •  

Domanda

Ho un selettore a tre componenti.

I primi due componenti dipendono l'ultimo.

Quindi potrebbe essere:

  1. | 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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top