79 votes

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 dans ma vue. Comment puis-je obtenir de la même manière la valeur sélectionnée ? Ou dois-je configurer une méthode de type didSelectRow pour le faire ?

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

NSInteger row;
NSString *weightSelected;

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

J'ai fatigué ce code pour mon picker avec 2 composants, mais il se bloque :

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];

130voto

SJS Points 1723

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

NSInteger row;
NSArray *repeatPickerData;
UIPickerView *repeatPickerView;

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

2 votes

StrPrintRepeat n'est rien d'autre qu'une variable qui stocke la valeur de la chaîne de caractères du PickerView. C'est-à-dire : - NSString *strPrintRepeat.

0 votes

Merci Jay, j'ai réussi à le faire fonctionner avec mon sélecteur qui a un seul composant. Pouvez-vous m'aider à le modifier pour qu'il fonctionne avec mon sélecteur à deux composants ? J'ai ajouté le code exact que j'utilise pour le sélecteur à un composant dans la question, merci.

4 votes

Je ne comprends pas cette réponse... Qu'est-ce que repeatPickerData ? Comment est-elle alimentée ?

34voto

nh32rg Points 561

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 pickerView, à 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]

pour définir le texte d'une étiquette dans une cellule personnalisée en utilisant la valeur actuellement sélectionnée dans la 2e 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]];

Changez simplement les deux :1s en :2s, etc. pour chaque section.

16 votes

+1 - c'est nettement mieux que la réponse actuelle (merdique) acceptée. Elle est plus claire, n'utilise pas de variables étranges qui n'ont pas été introduites ou expliquées, et ne suppose pas (sans l'indiquer) que le UIPickerViewDelegate est de récupérer les titres des lignes dans un tableau. Franchement, cela devrait être la réponse acceptée.

7voto

Harikrishnan T Points 1509

C'est ce que j'ai fait :

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

    selectedEntry = [allEntries objectAtIndex:row];

}

Le site selectedEntry est un NSString et maintiendra l'entrée actuellement sélectionnée dans la vue de sélection. Je suis novice en matière d'objectif C, mais je pense que cette méthode est beaucoup plus simple.

6voto

drewag Points 12938

Vous pouvez accéder à la ligne sélectionnée pour un composant donné en utilisant la méthode suivante :

- (NSInteger)selectedRowInComponent:(NSInteger)component

Sinon, la mise en œuvre de la fonction de délégué est la seule autre option.

0 votes

Ok, j'ai actuellement un dimissPicker qui est appelée lorsque l'on appuie sur le bouton d'envoi. Je veux que la valeur sélectionnée soit ensuite enregistrée ou qu'elle mette à jour un bouton, etc. lorsque la méthode dissmissPicker est appelée. Comment puis-je faire cela ? Dois-je ajouter la méthode selectedRowInCompnent méthode ?

0 votes

C'est probablement la meilleure façon de faire, oui.

0 votes

Ok parfait, pouvez-vous m'aider à mettre ça en place ? Je viens d'ajouter le selectedRowInComponent mais que dois-je faire exactement avec. Elle est censée renvoyer la valeur sélectionnée. J'ai également 2 composants dans le clicker.

0voto

Dave DeLong Points 156978

Vous devez utiliser le didSelectRow car une méthode de délégué UIPickerView peut avoir un nombre arbitraire de composants. Il n'y a pas de "valeur de l'objet" ni rien de tel, car cela dépend entièrement de vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X