2017-09-26 3 views
1

Dans ma vue de sélecteur, je souhaite que la ligne par défaut soit zéro. Cette ligne a une valeur de 1. Je veux être en mesure de ne toucher à rien sur le contrôleur de vue, sauf un bouton. Je sais qu'il y a des questions similaires mais elles n'ont pas fonctionné pour moi.PickerView Ligne par défaut sélectionnée mais renvoyée à zéro sauf si la vue du sélecteur est déplacée

override func viewWillAppear(_ animated: Bool) { 

    self.pickerView.delegate = self 
    self.pickerView.dataSource = self 


    self.pickerView.selectRow(0, inComponent: 0, animated: true) 

     } 


func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    return String(numbers[row]) 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    return numbers.count 

} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    therow = pickerView.selectedRow(inComponent: 0) + 1   
} 

puis

@IBAction func submitTapped (_ expéditeur: Tous) { Imprimer (therow) }

Lorsque je tape envoyer et imprimer la valeur à la ligne 0, il est 0, mais si je remue la vue du sélecteur et la remets sur la ligne 0, elle imprime 1. Je dois être en mesure de ne rien toucher sur la vue du sélecteur et de lui renvoyer la valeur correcte de la ligne par défaut.

+0

Je pense que vous devriez utiliser "theRowIndex = ligne" dans la méthode didSelectRow –

+0

theRowIndex est @SaurabhPrajapati inconnu –

+0

est 'didSelectRow' appelé du tout lorsque vous appuyez seulement sur le bouton? – Sweeper

Répondre

1

Vous devez utiliser le row que la méthode délégué de pickerview vous donne, vous devez modifier votre code comme suit:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    therow = numbers[row] 
    //theRowIndex = row //this is the index of row that you selected 


} 

par exemple, si le tableau numbers est nombres = [1, 2, 3, 4 ], lorsque vous cliquez sur la première ligne ci-dessus, le code therow sera égal à 1 et si vous cliquez sur la deuxième ligne, therow sera réglé sur 2 et ainsi de suite.

si vous souhaitez utiliser le code que vous avez écrit, vous pouvez utiliser comme suit:

therow = numbers[pickerView.selectedRow(inComponent: 0)] 

cela vous donnera le numéro de ligne sélectionnée, mais je pense que vous ne avez pas besoin à l'intérieur de la méthode ci-dessus.

Maintenant, si vous ne voulez pas toucher le sélecteur alors je pense que vous devez faire ceci:

@IBAction func submitTapped(_ sender: Any) { 
     therow = numbers[self.pickerView.selectedRow(inComponent: 0)] 
     print(therow) 

} 
+0

Où avez-vous obtenu "theRowIndex" à partir de ce programme est inconnu dans mon programme @ 3stud1ant3 –

+0

@MichaelR.mes appologies, je l'ai seulement mentionné comme un exemple, mis à jour la réponse, voir si cela vous aide – 3stud1ant3

1

Utilisez cette instruction une fois que vous chargez votre point de vue sélecteur avec des données.

yourPicker.selectRow(0, inComponent:0, animated:true) 

Vous pouvez modifier la valeur sélectionnée par défaut en modifiant le premier paramètre de selectRow.

1

Je pense que la raison pour laquelle cela se produit est que didSelectRow n'est en quelque sorte pas appelé si vous avez sélectionné la ligne par programmation. Conformément à la docs:

appelé par la vue lorsque le sélecteur utilisateur sélectionne une ligne dans un composant.

Vous devez définir votre therow propriété par programme après que vous appelez selectRow:

self.pickerView.selectRow(0, inComponent: 0, animated: true) 
therow = 1 // <--- this line