2010-03-09 29 views
9

Soy un programador .NET y nuevo en Objective C.UIPickerView con NSDictionary

estoy tratando de hacer una UIPickerView que actúa como una lista desplegable .NET. El usuario ve la lista de texto y selecciona una, y el valor seleccionado (que es la ID) se usa en el código.

He estado navegando durante casi medio día tratando de resolver esto. Podría agregar un PickerView regular con una lista de cadenas, una vista del selector con varios componentes y una vista del selector con componentes dependientes, ninguno de los cuales parece responder a mi consulta.

Por favor ayuda.

+0

El UIPickerView es no se verá ni se comportará exactamente como la lista desplegable .net, pero la funcionalidad esencial está ahí. Aparte de la apariencia, ¿hay algún problema específico que tenga? – DyingCactus

+0

solo quiero usar un par de clave-valor para la fuente de datos para UIPickerView. Parece que eso no es posible. Tengo un NSObject personalizado [con Nombre y propiedades de ID]. Configuro los nombres para mostrar en el UIPickerView. Cuando el usuario selecciona un nombre, necesito encontrar el ID del Nombre y usarlo. Gracias por su respuesta. – Dave

Respuesta

13

Se puede utilizar un NSDictionary como fuente de datos para UIPickerView pero si usted tiene una costumbre NSObject que ya contiene el par clave/valor, entonces sería más fácil de usar un NSArray de esos objetos como la fuente de datos.

Supongamos que el objeto personalizado es Planet con las propiedades planetId (int) y planetName (NSString). Crea un NSArray llamado planetas con los objetos en el orden en que quieres que aparezcan en el selector (no tienen que estar en el orden planetario).

En titleForRow, que haría:

return ((Planet *)[planets objectAtIndex:row]).planetName; 

En didSelectRow, para obtener el planeta seleccionado:

Planet *selectedPlanet = (Planet *)[planets objectAtIndex:row]; 

// //

Con una NSDictionary, que tendría que mapear los valores clave al número de fila del selector. Una forma de hacerlo es simplemente establecer los valores de clave a los números de fila y agregar los objetos personalizados como los valores.

Así que el diccionario se crearía así:

NSArray *keys = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", nil]; 
NSArray *values = [NSArray arrayWithObjects:mercury, venus, earth, mars, nil]; 
items = [[NSDictionary dictionaryWithObjects:values forKeys:keys] retain]; 

En titleForRow, puede hacer:

NSString *itemKey = [NSString stringWithFormat:@"%d", row]; 
Planet *planet = (Planet *)[items objectForKey:itemKey]; 
return planet.planetName; 

En didSelectRow, puede hacer:

NSString *itemKey = [NSString stringWithFormat:@"%d", row]; 
Planet *selectedPlanet = (Planet *)[items objectForKey:itemKey]; 
+0

¡Eso funcionó! Gracias – Dave

+1

Exactamente lo que estaba buscando, gracias @DyingCactus! –

+1

¿Puedo obtener este código en Swift? –