¿Cómo agrego varios componentes a PickerView?

Puede ser una pregunta simple, pero ¿cómo puedo agregar varios componentes a un UIPickerView? Utilizo NSMutableArray para completar un componente, pero no sé cómo llenar los demás. También necesito cambiar el valor de una label cuando se selecciona una fila. Gracias de antemano Kieran

Supongo que eres un principiante. A continuación, se explica cómo implementar los methods que nacho ha señalado correctamente:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { // return the number of components requinetworking return 2; } 

Puede usar otros NSMutableArray para rellenar los componentes. Suponiendo que tiene 2 componentes, cada uno usando diferentes NSMutableArray es decir, array1 y array2 :

 // Return row count for each of the components - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) { return [array1 count]; } else { return [array2 count]; } } // Populate the rows of the Picker - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { // Component 0 should load the array1 values, Component 1 will have the array2 values if (component == 0) { return [array1 objectAtIndex:row]; } else if (component == 1) { return [array2 objectAtIndex:row]; } return nil; } 

Use este código para cambiar el text de una label , diga selectedValue cuando se selectedValue un valor en PickerView:

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { selectedValue.text = [NSString stringWithFormat: @"%@, %@", [array1 objectAtIndex:[myPicker selectedRowInComponent:0]],[array2 objectAtIndex:[myPicker selectedRowInComponent:1]]]; } 

… y ya eres bueno 🙂

También es posible que desee consultar http://joshhighland.com/blog/2009/09/17/uipickerview-spinning-multiple-components/ para get sugerencias valiosas sobre la progtwigción de pickerView.

Necesita establecer el origen de datos y usar

 – numberOfComponentsInPickerView: – pickerView:numberOfRowsInComponent: 

configure su delegado y use:

 – pickerView:didSelectRow:inComponent: 

para cambiar su label cuando se selecciona una determinada fila en un determinado componente. Muy probable que UITableViewDelegate y Datasource

y también echar un vistazo a la documentation ayuda 🙂

En lugar del component encontré usar la tag más adecuada.

introduzca la descripción de la imagen aquí

Luego en el código:

 // returns the # of rows in each component.. - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ //NSLog(@"Component_1: %d",pickerView.tag); if (pickerView.tag == 1) return [self.arrOpponentTeams count]; else if (pickerView.tag == 2) return [self.arrMyTeams count]; else return [self.arrPlayers count]; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{ //NSLog(@"Component_2: %d",pickerView.tag); if( pickerView.tag == 1 ) return [self.arrOpponentTeams objectAtIndex:row]; else if (pickerView.tag == 2) return [self.arrMyTeams objectAtIndex:row]; else return [self.arrPlayers objectAtIndex:row]; } 

No sé si es un poco tarde Pero resolví esto de otra manera Array son un poco rudimentarios Pero funciona maravillas Incluso puedes poner diferentes colors en cada array

 - (void) viewDidLoad { horPickerArray = @[@"00",@"01",@"02",@"03",@"04",@"05".to..24]; minPickerArray = @[@"00",@"01",@"02",@"03",@"04",@"05".to..59]; secPickerArray = @[@"00",@"01",@"02",@"03",@"04",@"05".to..59]; } - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 3; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { if (component == 0) { return _HorPickerArray.count ; } else if (component == 1) { return _MinPickerArray.count ; } else if (component == 2) { return _SecPickerArray.count ; } } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { if (component == 0) { return [_HorPickerArray objectAtIndex:row]; } else if (component == 1) { return [_MinPickerArray objectAtIndex:row]; } else if (component == 2) { return [_SecPickerArray objectAtIndex:row]; } return nil; } 

E imprimir en TextField

 -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ _OficialTime.text =[NSString stringWithFormat: @"%@:%@:%@", [_HorPickerArray objectAtIndex:[_TimerPiker selectedRowInComponent:0]],[_MinPickerArray objectAtIndex:[_TimerPiker selectedRowInComponent:1]], [_SecPickerArray objectAtIndex:[_TimerPiker selectedRowInComponent:2]]]; }