Pregunta

¿Hay alguna forma de establecer un valor predeterminado para un selector? Guardo la última fila seleccionada de todos los recolectores y deseo que los recolectores carguen esas filas guardadas al inicio. A partir de ahora he encontrado este código:

[settingsPagePicker selectRow:3 inComponent:0 animated:YES];

Funciona pero solo cuando el usuario toca el selector. Necesito que funcione cuando la aplicación se carga por primera vez. Si pongo este código en viewDidLoad, la aplicación se bloqueará. ¿Alguien sabe dónde está el lugar adecuado para poner esto en mi código para que funcione?

¡Gracias por su tiempo!

¿Fue útil?

Solución

¿Ha verificado su fuente de datos para la configuraciónPagePicker antes de llamar a -selectRow: inComponent: animado para asegurarse de que haya datos disponibles en ese índice (3 en su código de muestra)?

¿Cómo carga sus datos para su fuente de datos? Puede inicializar su fuente de datos en viewDidLoad primero y luego llamar a selectRow una vez que sepa que hay datos disponibles.

ACTUALIZACIÓN: así es como debería verse su código o algo similar:

- (void)viewDidLoad
{
    [super viewDidLoad];
    pickerDataSource = [[NSMutableArray alloc] init];
    [pickerDataSource addObject:@"Item 01"];
    [pickerDataSource addObject:@"Item 02"];
    [pickerDataSource addObject:@"Item 03"];
    [pickerDataSource addObject:@"Item 04"];

    // Might want to move this to -viewWillAppear:animated
    [settingsPagePicker selectRow:3 inComponent:0 animated:YES];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
    if (pickerView == settingsPagePicker)
    {
        return [pickerDataSource objectAtIndex:row];
    }
    return @"";
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{
    if (pickerView == settingsPagePicker)
    {
        return [pickerDataSource count];
    }
    return 0;
}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView
{
    return 1;
}

Otros consejos

Aquí algunos métodos de mi clase.

- (void)viewDidLoad {
   [super viewDidLoad];
   currentNumbersOfComponents = 1;
   //[picker selectRow:2 inComponent:0 animated:NO];
}
- (void) viewDidAppear:(BOOL)animated{
   [super viewDidAppear:animated];
   [picker selectRow:2 inComponent:0 animated:YES];
}

#pragma mark picker view data source methods

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return currentNumbersOfComponents;
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return 5;
}

picker.dataSource es auto

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