2009-09-07 7 views
20

J'ai un UIPickerView avec 3 composants remplis avec 2 NSMutableArrays (2 composants ont le même tableau).Obtenir la ligne sélectionnée dans UIPickerView pour chaque composant

Un tutoriel dit:

//PickerViewController.m 
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row); 
} 

Mais je veux montrer la ligne sélectionnée pour chaque composant dans un UIAlertViewaprès que l'utilisateur a touché un UIButton.

Existe-t-il un moyen de le faire? Ou dois-je simplement utiliser 3 invisible UILabels comme tampon?

Merci d'avance.

Répondre

46

Ainsi, dans votre méthode d'action de bouton, vous pouvez faire quelque chose comme ceci:

- (IBAction) showAlert { 
    NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView]; 

    NSMutableString * text = [NSMutableString string]; 
    for(NSUInteger i = 0; i < numComponents; ++i) { 
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i]; 
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i]; 
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i]; 
    } 

    NSLog(@"%@", text); 
} 

Ce serait la façon formelle absolue pour récupérer des informations (en utilisant la source de données et les méthodes d'délégués), mais il pourrait être plus facile (en fonction de votre configuration), simplement saisir la ligne sélectionnée, puis retirer directement les informations de votre modèle au lieu de passer par la méthode déléguée.

+2

Merci! selectedRowInComponent est exactement ce dont j'avais besoin. –

+2

Uhm, pourquoi utilisez-vous un entier non signé ici? - [UIPickerView selectedRowInComponent:] peut également renvoyer -1 s'il n'y a pas de ligne sélectionnée. – datwelk

+0

Cool .. !!! Ça marche. – Siten

1

Version Swift 3:

var value = "" 
for i in 0..<numberOfComponents { 
         let selectedRow = pickerView.selectedRow(inComponent: i) 
         if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) { 
          value += s 
         } 
        } 
Questions connexes