2017-03-01 1 views
1

J'ai un UIPickerView et un UILabel, séparés les uns des autres.UIPickerView Jitter

Lorsque l'utilisateur sélectionne une ligne dans la UIPickerView, je change le texte UILabel en utilisant la fonction de délégué:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
{ 
    label.text = String(row); 
} 

Pourtant, pour une raison quelconque de modifier le libellé de l'étiquette provoque la UIPickerView pour revenir en arrière vers le haut (premier rangée). Lorsque je supprime la ligne "label.text = String (row);" le UIPickerView ne saute pas du tout.

Ceci est très étrange et je ne trouve aucune corrélation entre les deux éléments.

Merci d'avance pour toute réponse :)

+0

Est-ce que le texte de l'étiquette est réglé correctement avant de revenir en arrière ou est-il à 0 à chaque fois? –

+0

Oui, le texte est défini correctement, puis l'UIPicker revient –

+0

Et si au lieu de définir le texte de l'étiquette, vous venez d'imprimer Chaîne (ligne)? Est-ce que ça saute encore? Je n'ai jamais vu ça et je n'ai pas de réponse donc j'essaye de t'aider à débugger –

Répondre

0

Transforme que ce « bug magique étrange » était dû au fait que je définir la valeur par défaut du UIPickerViews dans viewDidLayoutSubviews() en raison d'un autre bogue.

Par conséquent, chaque fois qu'un élément a été modifié, viewDidLayoutSubviews() a été appelé et la valeur de UIPickerView a été définie à nouveau, ce qui l'a fait sauter.