Pregunta Obtener la fila seleccionada en UIPickerView para cada componente


Yo tengo un UIPickerView con 3 componentes poblados con 2 NSMutableArrays (2 componentes tienen la misma matriz).

Un tutorial dice:

//PickerViewController.m
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row);
}

Pero quiero mostrar la fila seleccionada para cada componente en un UIAlertView  después de que el usuario tocó un UIButton.

¿Hay alguna forma de hacer esto? O solo debo usar 3 invisibles UILabels como buffer?

Gracias por adelantado.


21
2017-09-07 14:55


origen


Respuestas:


Entonces, en su método de acción de botón, puede hacer algo como esto:

- (IBAction) showAlert {
  NSUInteger numComponents = [[myPickerView datasource] numberOfComponentsInPickerView:myPickerView];

  NSMutableString * text = [NSMutableString string];
  for(NSUInteger i = 0; i < numComponents; ++i) {
    NSUInteger selectedRow = [myPickerView selectedRowInComponent:i];
    NSString * title = [[myPickerView delegate] pickerView:myPickerView titleForRow:selectedRow forComponent:i];
    [text appendFormat:@"Selected item \"%@\" in component %lu\n", title, i];
  }

  NSLog(@"%@", text);
}

Esta sería la forma más formal de recuperar información (mediante el uso de la fuente de datos adecuada y los métodos de delegado), pero podría ser más fácil (dependiendo de su configuración), simplemente tomar la fila seleccionada y luego extraer la información de su modelo directamente , en lugar de pasar por el método delegado.


46
2017-09-07 15:31



Swift 3 versión:

    var value = ""
for i in 0..<numberOfComponents {
                        let selectedRow = pickerView.selectedRow(inComponent: i)
                        if let s = pickerView.delegate?.pickerView!(pickerView, titleForRow: selectedRow, forComponent: i) {
                            value += s
                        }
                    }

1
2018-02-02 20:40