web-dev-qa-db-fra.com

Obtenir la valeur actuellement sélectionnée de UIPickerView

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

11
rbk

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 .

22
Michael Dautermann
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int)
{
    // selected value in Uipickerview in Swift
    let value=array[row]
    println("values:----------\(value)");

}
16
Quad

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);
    }
}
5

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)

4
valfer

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)
2
Sachin Nautiyal