J'ai un UIPickerView
avec 3 composants peuplés de 2 NSMutableArrays
(2 composants ont le même tableau).
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 afficher la ligne sélectionnée pour chaque composant dans un UIAlertView
après que l'utilisateur a touché un UIButton.
Y a-t-il un moyen de faire cela? Ou dois-je simplement utiliser 3 UILabels
invisibles comme tampon?
Merci d'avance.
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 le moyen formel absolu de récupérer des informations (en utilisant la bonne source de données et les méthodes de délégation), mais il pourrait être plus facile (en fonction de votre configuration), de simplement saisir la ligne sélectionnée, puis d'extraire directement les informations de votre modèle , au lieu de passer par la méthode déléguée.
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
}
}