Je configure un UIPickerView
pour avoir des choix comme choix a, choix b, choix c et ainsi de suite. J'ai essayé d'interpréter l'exemple de code de Apple mais cela semble très difficile à comprendre pour un débutant comme moi. J'aimerais également que les choix de la vue du sélecteur me conduisent à une autre page si cela est possible.
Il est évident pour tout débutant que c'est un peu fastidieux de comprendre ces choses la première fois.
Quoi qu'il en soit, savez-vous comment utiliser UITableView
s? Savez-vous comment utiliser UITableViewDelegate
et UITableViewDataSource
? Si votre réponse est oui, imaginez simplement que UIPickerView
s sont comme UITableView
s (mais rappelez-vous qu'ils ne sont pas UITableViewController
s).
Disons que j'ai un UIPickerView
:
UIPickerView *objPickerView = [UIPickerView new]; // You need to set frame or other properties and add to your view...you can either use XIB code...
1) Vous devez d'abord affecter les delegate
et dataSource
aux UIPickerView
via IB ou code. Cela dépend de votre implémentation (cette étape ressemble donc beaucoup à un UITableView
, n'est-ce pas?)
Comme ça:
objPickerView.delegate = self; // Also, can be done from IB, if you're using
objPickerView.dataSource = self;// Also, can be done from IB, if you're using
2) Ensuite, vous devez définir le nombre de sections, comme ceci:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView {
return 1; // Or return whatever as you intend
}
2) Ensuite, vous devez définir le nombre de lignes dont vous avez besoin:
- (NSInteger)pickerView:(UIPickerView *)thePickerView
numberOfRowsInComponent:(NSInteger)component {
return 3;//Or, return as suitable for you...normally we use array for dynamic
}
3) Ensuite, définissez le titre de la ligne (Et si vous avez plusieurs sections, alors le titre de chaque section):
- (NSString *)pickerView:(UIPickerView *)thePickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [NSString stringWithFormat:@"Choice-%d",row];//Or, your suitable title; like Choice-a, etc.
}
4) Ensuite, vous devez obtenir l'événement lorsque quelqu'un clique sur un élément (lorsque vous souhaitez naviguer vers un autre contrôleur/écran):
- (void)pickerView:(UIPickerView *)thePickerView
didSelectRow:(NSInteger)row
inComponent:(NSInteger)component {
//Here, like the table view you can get the each section of each row if you've multiple sections
NSLog(@"Selected Color: %@. Index of selected color: %i",
[arrayColors objectAtIndex:row], row);
//Now, if you want to navigate then;
// Say, OtherViewController is the controller, where you want to navigate:
OtherViewController *objOtherViewController = [OtherViewController new];
[self.navigationController pushViewController:objOtherViewController animated:YES];
}
C'est toute l'implémentation dont vous avez besoin.
Je vais expliquer brièvement comment y parvenir par programme
- (void)viewDidLoad {
[super viewDidLoad];
UIPickerView * picker = [UIPickerView new];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = YES;
[self.view addSubview:picker];
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return 3;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSString * title = nil;
switch(row) {
case 0:
title = @"a";
break;
case 1:
title = @"b";
break;
case 2:
title = @"c";
break;
}
return title;
}
Fondamentalement, dans le viewDidLoad
, nous créons et ajoutons un UIPickerView
à la vue, lui indiquant que notre contrôleur sert à la fois de delegate
et dataSource
(vous pouvez faire cela dans Interface Builder aussi)
Ensuite, nous implémentons deux méthodes de source de données afin de déterminer le nombre de composants et le nombre de lignes par composant du pickerView, respectivement numberOfComponentsinPickerView:
et pickerView:numberOfRowsInComponent:
Enfin, nous implémentons la méthode déléguée pickerView:titleForRow:forComponent:
qui renvoie le contenu de chaque ligne.
Si vous souhaitez personnaliser le comportement lorsqu'une ligne a été sélectionnée, vous pouvez implémenter la méthode déléguée pickerView:didSelectRow:inComponent:
qui - comme son nom l'indique - est appelé chaque fois qu'une ligne est sélectionnée.
Un UIPickerView utilise un partenaire similaire à celui utilisé pour un UITableView. DataSource
et Delegate
protocole.
Les méthodes DataSource
sont utilisées pour indiquer au sélecteur combien de "colonnes" et combien de "lignes" il y a dans votre sélecteur.
Alors que les méthodes Delegate
sont pour le reste, la hauteur des lignes, la largeur des colonnes, les vues ou le titre à afficher et un rappel lorsque le sélecteur a été déplacé.
IPickerView