web-dev-qa-db-fra.com

Comment recharger/actualiser UIPickerView (avec le nouveau tableau de données) en appuyant sur un bouton

 enter image description here

SI je voulais un sélecteur, pour les États/provinces, je n’ai pas vu d’exemple, mais j’ai simulé l’illustration ci-dessus, un sélecteur pour US/Can/Mex. Vous vous demandez si vous pouvez basculer dynamiquement le NSMutableArray pour le UIPickerView puis le recharger chaque fois que vous cliquez sur les boutons US/Can/Mex ??? Comment puis-je faire cela. Quelle est mon approche? Vous cherchez une personne pour diriger un débutant vers un indice dans la bonne direction. 

54
jim4iOS

Vous devrez implémenter la source de données et le délégué.

une fois que vous avez appuyé sur un bouton, définissez un pointeur sur le tableau approprié.

que l'appel [thePicker reloadAllComponents];

-(IBAction) usButtonPressed:(id)sender{
    self.inputArray = self.usArray;
    [self.thePicker reloadAllComponents];
}

-(IBAction) mexicoButtonPressed:(id)sender{
    self.inputArray = self.mexicoArray;
    [self.thePicker reloadAllComponents];
}

les méthodes de la source de données:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
    return 1;
}


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return [self.inputArray count];
}

les méthodes déléguées:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    return [self.inputArray objectAtIndex:row];
}
111
vikingosegundo

Swift: xcode 6.1

// recharge le composant du sélecteur (utilisé dans le déclencheur ou le bouton)

self.pickerControl.reloadAllComponents();
15
Vinod Joshi

En appelant 

thePicker.delegate = self;

encore une fois, j'ai pu forcer l'actualisation du pickerview avec de nouvelles informations

6
Juan Manuel

Dans Swift 3 dans xcode-8, vous écrivez simplement dans la fonction didSelectRow comme ci-dessous

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


        self.view.endEditing(false)
        yourPickerView.selectRow(0, inComponent: 0, animated: true)
        yourPickerView.reloadAllComponents();

}
3
Enamul Haque

Utilisez plusieurs sélecteurs ou utilisez un bloc de commutateur pour déterminer les données à charger et rechargez le sélecteur.

2
WrightsCS

Dans votre action sur le bouton,

[self.pickerView selectRow:0 inComponent:0 animated:YES];
2
Jeff John

Swift 3 & 4

J'ai eu le même problème mais aucune solution ne fonctionne,

alors j'utilise DispatchQueue cela fonctionne

DispatchQueue.main.async(execute: {
        self.picker.delegate = self
        self.picker.dataSource = self
        if self.pickerData.count > 0 {
            self.pickerTextField.text = self.pickerData[0]
            self.pickerTextField.isEnabled = true
        } else {
            self.pickerTextField.text = nil
            self.pickerTextField.isEnabled = false
        }
    })
0
Sumit