Je développe une application où je suis frappé par le bouclage de lignes dans un UIPickerView. Est-ce que quelqu'un peut m'aider s'il vous plait? ce serait d'une grande aide si quelqu'un publiait la solution. Je veux que les lignes d'un UIPickerView défilent continuellement de manière circulaire sans avoir de point final.Pouvons-nous activer la mise en boucle de lignes dans un UIPickerView comme nous le faisons dans UIDatePicker?
1
A
Répondre
2
C'est possible. Pour tous ceux qui en ont besoin, essayez this.
1
Je ne pense pas que ce soit possible. J'ai entendu des gens répéter la liste de valeurs un grand nombre de fois, et commencer l'utilisateur quelque part au milieu.
0
Cela fonctionne, il suffit de regarder la mémoire. Dit que les éléments non montrés ne sont pas stockés, ce qui peut rendre la liste énorme. Vérifiez avec profiler si inquiet. Il est tout aussi facile de définir le nombre de lignes sur un grand nombre, et de le faire démarrer à une valeur élevée, il y a peu de chance que l'utilisateur fasse défiler la roue pendant longtemps - Et même alors, le pire va arriver, c'est qu'ils vont frapper le fond.
(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
// Near-infinite number of rows. use NSIntegerMax, if memory problem, use less say 2000
return 2000;
}
(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
// Row n is same as row (n modulo numberItems).
return [NSString stringWithFormat:@"%d", row % numberItems]; // or your strings (this is for double. numberItems is your list size.
}
(void)viewDidLoad {
[super viewDidLoad];
self.pickerView = [[[UIPickerView alloc] initWithFrame:CGRectZero] autorelease];
// ...set pickerView properties... Look at Apple's UICatalog sample code for a good example.
// Set current row to a large value (adjusted to current value if needed).
[pickerView selectRow:3+1000 inComponent:0 animated:NO]; //pick about half the max you made earlier or about 100000 if using NSIntegerMax
[self.view addSubview:pickerView];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSInteger actualRow = row % numberItems; //nb numberItems is your list size
// ...
}
Jon