Pregunta

Me gustaría mostrar un conjunto de números consecutivos en un componente de UIPickerView, pero tengo que ajustarlo como el componente de segundos de la aplicación de reloj y temporizador. El único comportamiento que puedo habilitar se parece al componente de horas de la aplicación del temporizador, donde puedes desplazarte en una sola dirección.

¿Fue útil?

Solución

Es igual de fácil establecer el número de filas en un número grande, y hacer que comience en un valor alto, hay pocas posibilidades de que el usuario alguna vez desplace la rueda durante mucho tiempo. Y aún así, el peor de lo que sucederá 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;
    // ...
}

Otros consejos

Encontré mi respuesta aquí:

http://forums.macrumors.com/showthread.php ? p = 6120638 & amp; highlight = UIPickerView # post6120638

Cuando solicite el título de una fila, proporciónelo: 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ñarlo insertando más conjuntos de datos para mostrar y cuando el selector se detiene, centrando el componente en el centro del conjunto de datos.

Simplemente crea una matriz varias veces, para que tengas tus números varias veces. Digamos cuándo queremos tener los números del 0 al 23 y colocarlos 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 configuramos la fila 0 seleccionada de esta manera

[_hoursPickerView selectRow:120 inComponent:0 animated:NO];

Todas las respuestas no hacen que la vista del selector se desplace cíclicamente.

He creado un tableView cíclico basado en UIScrollView . Y en base a este tableView, vuelvo a implementar UIPickerView . Quizás te 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 personalizar esta vista de selector es mucho más fácil.

https://github.com/danleechina/DLPickerView

Y tenga en cuenta que este desplazamiento DLPickerView cíclicamente se está desplazando cíclicamente. Toda la magia sucedió debido a otra clase DLTableView .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top