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];
Vous pouvez l'obtenir de la manière suivante:
NSInteger row;
NSArray *repeatPickerData;
UIPickerView *repeatPickerView;
row = [repeatPickerView selectedRowInComponent:0];
self.strPrintRepeat = [repeatPickerData objectAtIndex:row];
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
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.
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.
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.
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!;
}