Domanda

Sono un programmatore .NET e nuovi per Objective C.

Sto cercando di fare un UIPickerView che agisce come un dropdownlist .NET. Utente vede l'elenco dei testi e sceglie uno e il valore selezionato (che è l'ID) viene utilizzato nel codice.

Sono stato navigando per quasi mezza giornata cercando di capire questo fuori. Potrei aggiungere una pickerView regolare con lista di stringhe, vista raccoglitrice con componenti mulitple e vista raccoglitrice con componenti dipendenti nessuno dei quali sembra rispondere alla mia domanda.

Si prega di aiuto.

È stato utile?

Soluzione

È possibile utilizzare un NSDictionary come origine dati per UIPickerView, ma se avete un NSObject personalizzato che contiene già la coppia chiave / valore, allora sarebbe più semplice usare un NSArray di quegli oggetti come fonte dei dati.

Si supponga l'oggetto personalizzato è Pianeta con la proprietà planetId (int) e planetName (NSString). Crea un NSArray chiamato pianeti con gli oggetti nell'ordine in cui si desidera vengano visualizzati nel selettore (che 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, che avrebbe dovuto mappare i valori chiave per il numero di riga del selettore. Un modo per farlo è quello di impostare solo i valori chiave per i numeri di riga e aggiungere gli oggetti personalizzati come i valori.

Così il dizionario si verrebbe a creare 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 dovrebbe fare:

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

In didSelectRow, si dovrebbe fare:

NSString *itemKey = [NSString stringWithFormat:@"%d", row];
Planet *selectedPlanet = (Planet *)[items objectForKey:itemKey];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top