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.
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];
}
Swift: xcode 6.1
// recharge le composant du sélecteur (utilisé dans le déclencheur ou le bouton)
self.pickerControl.reloadAllComponents();
En appelant
thePicker.delegate = self;
encore une fois, j'ai pu forcer l'actualisation du pickerview avec de nouvelles informations
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();
}
Utilisez plusieurs sélecteurs ou utilisez un bloc de commutateur pour déterminer les données à charger et rechargez le sélecteur.
Dans votre action sur le bouton,
[self.pickerView selectRow:0 inComponent:0 animated:YES];
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
}
})