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];
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
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