web-dev-qa-db-fra.com

Comment obtenir la valeur sélectionnée de UIPickerView

Je sais qu'avec un UIDatePicker, vous pouvez utiliser quelque chose comme:

NSDate *myDate = picker.date;

Mais j'utilise un UIPickerView à mon avis. Comment puis-je pareillement obtenir la valeur sélectionnée? Ou dois-je configurer le type de méthode didSelectRow pour le faire?

Mise à jour: Ce code fonctionne pour le sélecteur avec 1 composant:

    NSInteger row;
    NSString *weightSelected;

    row = [repPicker selectedRowInComponent:0];
    weightSelected = [pickerArray objectAtIndex:row];

J'ai fatigué ce code pour mon préparateur avec 2 composants, mais il gèle:

    NSInteger row1, row2;
    NSString *weightSelected1;
    NSString *weightSelected2;

    row1 = [repPicker selectedRowInComponent:0];
    row2 = [repPicker selectedRowInComponent:1];
    weightSelected1 = [pickerArray objectAtIndex:row1];
    weightSelected2 = [pickerArray objectAtIndex:row2];
    NSString *weightSelected = [NSString stringWithFormat:@"%@.%@", weightSelected1, weightSelected2];
72
user594161

Vous pouvez l'obtenir de la manière suivante:

NSInteger row;
NSArray *repeatPickerData;
UIPickerView *repeatPickerView;

row = [repeatPickerView selectedRowInComponent:0];
self.strPrintRepeat = [repeatPickerData objectAtIndex:row];
125
SJS

Vous pouvez obtenir le texte de l'élément sélectionné dans n'importe quelle section du sélecteur en utilisant la même fonction que le sélecteur, à partir de votre classe ViewController personnalisée:

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

en utilisant l'élément sélectionné

[myPickerView selectedRowInComponent:0]

afin de définir le texte d'une étiquette dans une cellule personnalisée en utilisant la valeur actuellement sélectionnée dans la 2ème section de myPickerView (une propriété de votre contrôleur de vue probablement)

[cell.label setText:[self pickerView:myPickerView titleForRow:[myPickerView selectedRowInComponent:1] forComponent:1]];

Il suffit de changer les deux: 1s à: 2s, etc. pour chaque section

33
nh32rg

C'est ce que j'ai fait:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

    selectedEntry = [allEntries objectAtIndex:row];

}

La selectedEntry est une NSString et conservera l'entrée actuellement sélectionnée dans la sélection. Je suis nouveau sur Objective C mais je pense que c'est beaucoup plus facile.

6
Harikrishnan

Vous pouvez accéder à la ligne sélectionnée pour un composant donné à l'aide de la méthode suivante:

- (NSInteger)selectedRowInComponent:(NSInteger)component

Sinon, l'implémentation de la fonction de délégué est la seule autre option.

5
drewag

Vous devez utiliser la méthode de délégué didSelectRow, car un UIPickerView peut avoir un nombre arbitraire de composants. Il n'y a pas de "objectValue" ou quelque chose comme ça, parce que c'est entièrement à vous.

0
Dave DeLong

Vous devrez demander au délégué du sélecteur, de la même manière que votre demande. Voici comment je le fais depuis mon UIPickerViewDelegate:

func selectedRowValue(picker : UIPickerView, ic : Int) -> String {

    //Row Index
    let ir  = picker.selectedRow(inComponent: ic);

    //Value
    let val = self.pickerView(picker,
                              titleForRow:  ir,
                              forComponent: ic);
    return val!;
}
0
J-Dizzle