2010-03-09 7 views
9

Ich bin ein .NET-Programmierer und neu in Objective C.UIPickerView mit NSDictionary

Ich versuche, eine UIPickerView zu machen, die wie eine .NET-Dropdownlist wirkt. Der Benutzer sieht die Textliste und wählt eine aus. Der ausgewählte Wert (die ID) wird im Code verwendet.

Ich habe für fast einen halben Tag gesucht, um das herauszufinden. Ich könnte eine reguläre PickerView mit einer Liste von Strings, Picker View mit mehreren Komponenten und Picker View mit abhängigen Komponenten hinzufügen, von denen keiner meine Anfrage zu beantworten scheint.

Bitte helfen.

+0

Die UIPickerView ist Sie werden nicht wie die .net-Dropdownliste aussehen oder sich so verhalten, aber die wesentliche Funktionalität ist vorhanden. Abgesehen von der Erscheinung, gibt es ein bestimmtes Problem, das Sie haben? – DyingCactus

+0

Ich möchte nur ein Schlüssel-Wert-Paar für die Datenquelle für UIPickerView verwenden. Sieht so aus, als ob das nicht möglich ist. Ich habe ein benutzerdefiniertes NSObject [mit Name und ID-Eigenschaften]. Ich stelle die Namen so ein, dass sie auf dem UIPickerView angezeigt werden. Wenn der Benutzer einen Namen auswählt, muss ich die ID des Namens finden und verwenden. Danke für Ihre Antwort. – Dave

Antwort

13

Sie können ein NSDictionary als Datenquelle für UIPickerView verwenden, aber wenn Sie ein benutzerdefiniertes NSObject haben, das bereits das Schlüssel/Wert-Paar enthält, wäre es einfacher, ein NSArray dieser Objekte als Datenquelle zu verwenden.

Angenommen, das benutzerdefinierte Objekt ist Planet mit den Eigenschaften planetId (int) und planetName (NSString). Erstellen Sie ein NSArray namens planets mit den Objekten in der Reihenfolge, in der sie in der Auswahl angezeigt werden sollen (sie müssen nicht in der Reihenfolge planetId sein).

In titleForRow, würden Sie tun:

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

In didSelectRow, den ausgewählten Planeten zu erhalten:

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

//
//
Mit einem NSDictionary, würden Sie müssen Ordnen Sie die Schlüsselwerte der Zeilennummer des Pickers zu. Eine Möglichkeit besteht darin, die Schlüsselwerte auf die Zeilennummern zu setzen und die benutzerdefinierten Objekte als Werte hinzuzufügen.

So würde das Wörterbuch wie folgt erstellt werden:

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, würden Sie tun:

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

In didSelectRow, würden Sie tun:

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

Das hat funktioniert! Danke – Dave

+1

Genau das, was ich gesucht habe, danke @DyingCactus! –

+1

Kann ich diesen Code in Swift bekommen –