web-dev-qa-db-fra.com

Obtenir la ligne sélectionnée dans UIPickerView pour chaque composant

J'ai un UIPickerView avec 3 composants peuplés de 2 NSMutableArrays (2 composants ont le même tableau).

Un tutoriel dit:

//PickerViewController.m
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row);
}

Mais je veux afficher la ligne sélectionnée pour chaque composant dans un UIAlertViewaprès que l'utilisateur a touché un UIButton.

Y a-t-il un moyen de faire cela? Ou dois-je simplement utiliser 3 UILabels invisibles comme tampon?

Merci d'avance.

21
user142019

Ainsi, dans votre méthode d'action de bouton, vous pouvez faire quelque chose comme ceci:

- (IBAction) showAlert {
  NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView];

  NSMutableString * text = [NSMutableString string];
  for(NSUInteger i = 0; i < numComponents; ++i) {
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i];
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i];
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i];
  }

  NSLog(@"%@", text);
}

Ce serait le moyen formel absolu de récupérer des informations (en utilisant la bonne source de données et les méthodes de délégation), mais il pourrait être plus facile (en fonction de votre configuration), de simplement saisir la ligne sélectionnée, puis d'extraire directement les informations de votre modèle , au lieu de passer par la méthode déléguée.

45
Dave DeLong

Version Swift 3:

var value = ""
for i in 0..<numberOfComponents {
    let selectedRow = pickerView.selectedRow(inComponent: i)
    if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) {
        value += s
    }
}
1
Roman Barzyczak