2011-12-22 32 views
49

click here for a mockup I made of the US/can/mex picker view http://i39.tinypic.com/b7kpyq.jpg¿Cómo recargo/actualizo UIPickerView (con una nueva matriz de datos) en función de presionar un botón?

si quería un selector, para los estados/provincias, no he visto un ejemplo, pero burlado arriba se muestra en el enlace de arriba, un selector por US/Can/Mex. ¿Te preguntas si puedes cambiar dinámicamente NSMutableArray para UIPickerView y luego volver a cargarlo cada vez que haces clic en los botones US/Can/Mex ??? Cómo voy a hacer esto. ¿Qué enfoque debo tomar? Buscando a alguien que apunte a un principiante en busca de una pista en la dirección correcta.

Respuesta

102

Deberá implementar la fuente de datos y el delegado.

una vez que presiona un botón, establezca un puntero de matriz en la matriz apropiada.

que llamar [thePicker reloadAllComponents];

-(IBAction) usButtonPressed:(id)sender{ 
    self.inputArray = self.usArray; 
    [self.thePicker reloadAllComponents]; 
} 

-(IBAction) mexicoButtonPressed:(id)sender{ 
    self.inputArray = self.mexicoArray; 
    [self.thePicker reloadAllComponents]; 
} 

los métodos origen de datos:

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


- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [self.inputArray count]; 
} 

los métodos de delegado:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [self.inputArray objectAtIndex:row]; 
} 
+0

Gracias por señalarme en la dirección correcta. Soy un novato Está bien ver que hay un método de clase para eso. y que "Llamar a este método hace que la vista del selector pregunte al delegado por los nuevos datos para todos los componentes" es muy bueno. Mi UI Picker actual tiene el origen de datos y los métodos de delegado :-) entonces eso es bueno. Estoy usando un libro, no sabía que la respuesta era correcta en los métodos de instancia de la documentación de la clase. Gracias de nuevo. – jim4iOS

+0

gracias hombre! fue muy útil! – fabersky

2

Use múltiples recolectores, o utilizar un bloque de interruptores para determinar qué datos se ser cargado, y volver a cargar el selector.

12

Swift: Xcode 6.1

// recargar el componente de selector (Se utiliza esta dentro de la acción o el botón de disparo)

self.pickerControl.reloadAllComponents(); 
+0

esto no responde la pregunta en absoluto. – vikingosegundo

4

Llamando

thePicker.delegate = self; 

de nuevo, yo era capaz para forzar la actualización de la vista de picker con nueva información

+1

swift 3, esto funcionó. –

2

En el botón presione la acción,

[self.pickerView selectRow:0 inComponent:0 animated:YES]; 
2

en Swift 3 en Xcode-8 que acaba de escribir en función de didSelectRow como fuelle

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 


     self.view.endEditing(false) 
     yourPickerView.selectRow(0, inComponent: 0, animated: true) 
     yourPickerView.reloadAllComponents(); 

} 
Cuestiones relacionadas