ios - example - ¿Cómo se hace para envolver un componente UIPickerView?
uitextfield picker (4)
Me gustaría mostrar un conjunto de números consecutivos en un componente UIPickerView pero tenerlo envuelto como el componente de segundos de la aplicación Clock-> Timer. El único comportamiento que puedo habilitar se parece al componente horas de la aplicación Timer, donde puede desplazarse solo en una dirección.
Encontré mi respuesta aquí:
http://forums.macrumors.com/showthread.php?p=6120638&highlight=UIPickerView#post6120638
Cuando le pide el título de una fila, dele: Código:
return [rows objectAtIndex:(row % [rows count])];
Cuando dice que el usuario didSelectRow: inComponent :, usa algo como esto:
Código:
//we want the selection to always be in the SECOND set (so that it looks like it has stuff before and after)
if (row < [rows count] || row >= (2 * [rows count]) ) {
row = row % [rows count];
row += [rows count];
[pickerView selectRow:row inComponent:component animated:NO];
}
Parece que UIPickerView no admite el ajuste de forma nativa, pero puede engañar al insertar más conjuntos de datos para mostrar y cuando el selector se detiene, centrando el componente en el medio del conjunto de datos.
Es tan fácil establecer el número de filas a un número grande, y hacer que comience con un valor alto, hay pocas posibilidades de que el usuario se desplace la rueda durante mucho tiempo. Y aún así, peor será sucede es que tocarán el fondo.
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
// Near-infinite number of rows.
return NSIntegerMax;
}
- (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];
}
- (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:currentValue+100000 inComponent:0 animated:NO];
[self.view addSubview:pickerView];
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSInteger actualRow = row % numberItems;
// ...
}
Simplemente cree una matriz varias veces, para que tenga sus números varias veces. Digamos cuando queremos tener los números del 0 al 23 y ponerlos en una matriz. que haremos 10 veces así ...
NSString *stdStepper;
for (int j = 0; j<10; j++) {
for(int i=0; i<24; i++)
{
stdStepper = [NSString stringWithFormat:@"%d", i];
[_hoursArray addObject:stdStepper];
}
}
más tarde establecemos la fila 0 seleccionada de esta manera
[_hoursPickerView selectRow:120 inComponent:0 animated:NO];
Todas las respuestas no hacen realmente que el selector se mueva cíclicamente.
He hecho un tableView cíclico basado en UIScrollView
. Y basado en este tableView, vuelvo a implementar UIPickerView
. Puede que le interese este DLPickerView
. Y esta vista de selector tiene todas las características que tiene UIPickerView
, pero también ofrece muchas características nuevas, y esta vista de selector personalizada es mucho más fácil.
https://github.com/danleechina/DLPickerView
Y tenga en cuenta que este desplazamiento cíclico DLPickerView
realmente se desplaza cíclicamente. Toda la magia sucedió debido a otra clase DLTableView
.