2010-03-09 12 views
9

io sono un programmatore .NET e nuovi per Objective C.UIPickerView con NSDictionary

Sto cercando di fare un UIPickerView che agisce come un dropdownlist .NET. L'utente vede l'elenco di testo e ne seleziona uno e il valore selezionato (che è l'ID) viene utilizzato nel codice.

Ho cercato per quasi mezza giornata cercando di capirlo. Potrei aggiungere un PickerView regolare con una lista di stringhe, una vista picker con componenti multipli e una vista picker con componenti dipendenti, nessuna delle quali sembra rispondere alla mia domanda.

Per favore aiuto.

+0

L'UIPickerView è non andando a guardare o comportarsi esattamente come il. droplist, ma la funzionalità essenziale è lì. A parte l'aspetto, c'è un problema specifico che stai avendo? – DyingCactus

+0

voglio solo utilizzare una coppia chiave-valore per l'origine dati per UIPickerView. Sembra che non sia possibile. Ho un NSObject personalizzato [con proprietà Nome e ID]. Ho impostato i nomi da visualizzare su UIPickerView. Quando l'utente seleziona un nome, ho bisogno di trovare l'ID del nome e usarlo. Grazie per la risposta. – Dave

risposta

13

È possibile utilizzare un NSDictionary come origine dati per UIPickerView ma se si dispone di un NSObject personalizzato che contiene già la coppia chiave/valore, sarebbe più semplice utilizzare un NSArray di tali oggetti come origine dati.

Si supponga che l'oggetto personalizzato sia Pianeta con le proprietà planetId (int) e planetName (NSString). Crea un NSArray chiamato pianeti con gli oggetti nell'ordine in cui vuoi che appaiano nel selettore (non devono essere in ordine planetId).

In titleForRow, si dovrebbe fare:

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

In didSelectRow, per ottenere il pianeta selezionato:

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

// //

Con una NSDictionary, si dovrebbe mappare i valori chiave al numero di riga del selettore. Un modo per farlo è semplicemente impostare i valori delle chiavi sui numeri di riga e aggiungere gli oggetti personalizzati come valori.

Così il dizionario sarebbe creato in questo modo:

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

In titleForRow, si farebbe:

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

In didSelectRow, si farebbe:

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

Ha funzionato! Grazie – Dave

+1

Esattamente quello che stavo cercando, grazie a @DyingCactus! –

+1

Posso ottenere questo codice in Swift –