J'ai cherché sur Google comment obtenir la valeur actuellement sélectionnée dans UIPickerView, mais partout où cela est mentionné en utilisant la ligne: 0 et ainsi de suite.
J'ai un UIPickerView rempli de valeurs de chaîne comme "One", "Two", etc.
Maintenant, quand je sélectionne une valeur pour dire "Deux", est-ce que je peux de toute façon obtenir ce texte.
Comme dans UITextView où il est _textview.text
Chaque UIPickerView doit avoir un délégué.
Et vous pouvez demander à ce délégué le titre de ligne sélectionné par votre sélecteur via quelque chose comme:
UIPickerViewDelegate *delegate = yourPickerView.delegate;
NSString *titleYouWant = [delegate pickerView:yourPickerView titleForRow:[yourPickerView selectedRowInComponent:0] forComponent:0];
(C'est [~ # ~] en supposant que [~ # ~] votre numéro de composant est zéro; votre propre implémentation peut être différente).
Plus de documentation sur le "pickerView:titleForRow:forComponent
"peut être vue ici .
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
// selected value in Uipickerview in Swift
let value=array[row]
println("values:----------\(value)");
}
Tout d'abord, ajoutez UIPickerViewDatasource et UIPickerViewDelegate dans le fichier .h
puis en .m ajoutez la ligne
self.myPickerView.delegate = self;
affectez maintenant un tableau à ses objets.
NSArray *arrOfAge = [[NSArray alloc]initWithObjects:@“one”,@”two”, nil];
Ce sont des méthodes déléguées
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [arrOfAge count];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSString *titleRow;
titleRow = [NSString stringWithFormat:@"%@", [arrOfAge objectAtIndex:row]];
return titleRow;
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
selectedRow = row;
}
Cette IBAction btnDone renvoie la ligne sélectionnée de pickerView.
- (IBAction)btnDone:(id)sender
{
NSUInteger num = [[self.myPickerView dataSource] numberOfComponentsInPickerView:self.myPickerView];
NSMutableString *text = [NSMutableString string];
for(NSUInteger i =0;i<num;++i)
{
NSUInteger selectRow = [self.myPickerView selectedRowInComponent:i];
NSString *ww = [[self.myPickerView delegate] pickerView:self.myPickerView titleForRow:selectRow forComponent:i];
[text appendFormat:@"%@",ww];
NSLog(@"%@",text);
}
}
Si l'UIPickerView n'a qu'un seul composant (quelque chose de similaire à la section pour UITableView), vous pouvez récupérer l '"index" sélectionné avec la ligne suivante:
NSInteger indexSelected = [myPicker selectedRowInComponent:0];
(changez le paramètre 0 si vous avez plus d'un composant).
Il s'agit de l'index de votre tableau de données (myArray), le même que vous avez utilisé pour renvoyer les données de la méthode déléguée, comme dans:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return myArray[row];
}
(ou méthodes déléguées similaires -attributedTitleForRow -viewForRow)
Swift
vous pouvez utiliser ce code pour obtenir le titre actuel
self.textview.text = self.pickerView(self.pickerViewOutlet, titleForRow: self.pickerViewOutlet.selectedRow(inComponent: 0), forComponent: 0)