2017-10-15 5 views
0

J'utilise UIPickerView et sa méthode pickerView(_:titleForRow:forComponent:) pour remplir les lignes. Tout fonctionne bien et je peux voir les lignes via l'interface utilisateur. Je me demande combien de fois la méthode est appelée - par exemple j'ai un composant et 3 lignes et si je trace des appels de méthode via la commande print, je trouve 8 appels (exécute).UIPickerView pickerView (_: titleForRow: pourComponent :) méthode

Je veux faire une action spécifique pour chaque ligne mais juste une fois. Tout indice de ce que j'ai fait à tort et comment je devrais le faire mieux? Merci.

Répondre

0

pickerView(_:titleForRow:forComponent:) est appelée par la vue du sélecteur lorsqu'elle a besoin du titre à utiliser pour une ligne donnée dans un composant donné. Donc, chaque fois que le titre est nécessaire, cette fonction de délégué est appelée. Et comme vous avez pu le remarquer, ces méthodes peuvent être appelées plusieurs fois, ce qui est normal.

Dans votre:

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 

Vous avez le row, vous pouvez créer un dictionnaire pour vérifier si vous avez défini une valeur avant. Quelque chose comme ceci:

var dictionary = [Int: Bool]() 
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if let value = dictionary[row] { 
     if !value { 
      // set value, the value of row has not been set before 
      ... 
      // set that rows value to true so that you know it has been set 
      dictionary[row] = true 
     } 
    } 
    return "some string" 
} 
+0

Merci, je l'ai fait de même mais en dehors de la méthode elle-même. Mais essayez aussi votre suggestion. – Dawy

+0

@Dawy, ça a marché pour vous? –

2

Vous pourriez ajouter à vos données un drapeau booléen qui déterminera pour faire l'appel ou pas.