2010-12-10 15 views
1

Ich habe eine uipickerview, die verwendet wird, um Namen in einem uitextfield anzuzeigen, irgendwelche Ideen, wie ich einen Wert übergeben würde, der vor dem Benutzer in eine Variable verborgen ist. Kann ich den Wert irgendwie mit dem Namen im NSArray verknüpfen, ohne ihn anzuzeigen? DankeUIPickerView Daten

ein Wörterbuch Der Versuch, aber ich bin auf etwas stecken, das wahrscheinlich ziemlich einfach ist, habe ich ein Wörterbuch

NSArray *keys = [NSArray arrayWithObjects:@"1", @"2", nil]; 
NSArray *objects = [NSArray arrayWithObjects:@"3", @"4", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

und in didSelectRow habe ich

NSString *itemKey = [NSString stringWithFormat:@"%f", row]; 
    survonemd.text = [dictionary objectForKey:itemKey]; 

, das in Ordnung scheint

aber bin fest auf titleForRow

jede Hilfe oder Tipps würden sehr geschätzt werden.

Ich habe jetzt -

@property (nonatomic, retain) NSArray *keys; 
@property (nonatomic, retain) NSArray *objects; 


@synthesize keys; 
@synthesize objects; 


self.keys = [NSArray arrayWithObjects:@"1", @"2", @"3", nil]; 
self.objects = [NSArray arrayWithObjects:@"4", @"5", @"6", nil]; 
NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
NSString *itemKey = [keys objectAtIndex:row]; 
return [dictionary objectForKey:itemKey]; 
} 

- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
NSString *itemKey = [keys objectAtIndex:row]; 
survonemd.text = [dictionary objectForKey:itemKey]; 
} 

Es läuft und die Picker Ansicht wird aus dem Textfeld aber keine Daten genannt wird, in dem Kommissionierer angezeigt. Bitte helfen Sie.

+0

Die Bereitstellung von Code könnte helfen, aber ich würde NSDictionary empfehlen, da Sie Schlüssel und Werte verwenden können. Sie können die auf dem UIPickerView angezeigten Schlüssel verwenden, die jeweils einem für den Benutzer verborgenen Wert entsprechen. – Jumhyn

+0

Dank Jumhyn, ich versuche, ein Wörterbuch zu verwenden, bin aber auf etwas fest, das ziemlich einfach sein sollte. Ich habe ein Wörterbuch – Mattog1456

Antwort

1

Statt die Schlüsselzeichenfolge von der Zeilenzahl zu erzeugen (für die Sie %i anstelle von %f durch die Art und Weise verwenden), verwenden, um die Zeile als Index in das Array Schlüssel:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    NSString *itemKey = [keys objectAtIndex:row]; 
    survonemd.text = [dictionary objectForKey:itemKey]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    NSString *itemKey = [keys objectAtIndex:row]; 
    return [dictionary objectForKey:itemKey]; 
} 

Auf diese Weise, Die Schlüsselwerte müssen auch keine Zahlen als Zeichenfolgen sein.

Definieren Sie Ihre Schlüssel und Dictionary-Objekte als Eigenschaften und setzen Sie sie mit self.keys = ..., so dass Sie richtig darauf zugreifen können.

+0

@ Mattog1456: Blick auf den aktualisierten Code in Ihrer Frage, ich denke, Sie müssen auch Wörterbuch eine Eigenschaft machen und setzen Sie es mit self.dictionary. Um zu überprüfen, ob das Wörterbuch die Daten in titleForRow vor der Rückgabe enthält, fügen Sie 'NSLog (@" dict =% @ ", Wörterbuch);' hinzu. Zeigt es die Wörterbuchdaten an? – Anna

+0

Vielen Dank aBitObvious Ich habe das Wörterbuch mit selbst gesetzt. und es funktioniert, Prost. – Mattog1456

+0

Großartig. Ich hätte das erklären sollen: Indem ich Eigenschaften deklarierte, wurde ein Teil der Speicherverwaltung für Sie erledigt und sichergestellt, dass die Daten, die Sie der Variablen zugewiesen haben, für die spätere Verwendung erhalten bleiben. Siehe [this] (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html%23//apple_ref/doc/uid/TP30001163-CH17-SW1) in die Dokumente für weitere Details. Außerdem sollten Sie diese Eigenschaften in dealloc freigeben, um einen Speicherverlust zu vermeiden (z. B. '[keys release];', etc). – Anna