Frage

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

Ich versuche, eine UIPickerView zu machen, die wie eine .NET-Dropdownlist wirkt. Benutzer sieht die Liste von Text und wählt einen und der ausgewählte Wert (das ist die ID) wird in Code verwendet.

Ich habe für gegrast fast einen halben Tag versucht, dies herauszufinden. Ich konnte einen regelmäßigen picker mit Liste von Strings, Picker Ansicht mit mulitple Komponenten und Picker Ansicht mit abhängigen Komponenten von denen keinerkeinekeines scheint in dem meine Frage zu beantworten.

Bitte helfen.

War es hilfreich?

Lösung

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

Angenommen das benutzerdefinierte Objekt ist Planet mit der Eigenschaften planetId (int) und planetName (NSString). Erstellen Sie eine NSArray genannt Planeten mit den Objekten in der Reihenfolge, die Sie im Picker angezeigt werden sollen (sie müssen nicht in planetId Ordnung sein).

In titleForRow, würden Sie tun:

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

In didSelectRow, die ausgewählten Planeten zu erhalten:

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

//
//
Mit einem NSDictionary, würden Sie die Schlüsselwerte in die Zeilennummer der Kommissionierer Karte müssen. Eine Möglichkeit, das zu tun, ist zu setzen nur die Schlüsselwerte zu den Zeilennummern und fügen Sie die benutzerdefinierten Objekte als Werte.

Also das Wörterbuch würde 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];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top