2010-12-10 4 views
1

J'ai un uipickerview qui est utilisé pour afficher les noms dans un champ uitext, des idées sur la façon dont je passerais une valeur qui est cachée à l'utilisateur dans une variable. Puis-je en quelque sorte associer la valeur avec le nom dans le NSArray tout en ne l'affichant pas. MerciDonnées UIPickerView

Essayer un dictionnaire, mais je suis coincé sur quelque chose qui est probablement assez simple, j'ai un dictionnaire

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

et didSelectRow je

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

qui semble ok

mais je suis coincé sur le titreForRow

toute aide ou conseils serait très appréciée.

J'ai maintenant -

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

Il fonctionne et la vue du sélecteur est appelé à partir du champ de texte, mais aucune donnée n'apparaît dans le sélecteur. S'il vous plaît aider.

+0

Fournir du code peut être utile, mais je recommanderais d'utiliser NSDictionary car il vous permet d'avoir des clés et des valeurs. Vous pouvez afficher les clés sur UIPickerView, chacune correspondant à une valeur masquée pour l'utilisateur. – Jumhyn

+0

Merci Jumhyn, j'essaie d'utiliser un dictionnaire mais je suis coincé sur quelque chose qui devrait être assez simple. J'ai un dictionnaire – Mattog1456

Répondre

1

Au lieu de générer la chaîne clé à partir du numéro de ligne (pour lequel vous utiliseriez %i au lieu de %f par la voie), utilisez la ligne comme l'index dans le tableau de clés:

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

De cette façon, les valeurs de clé ne doivent pas non plus être des nombres-comme-chaînes.

Définissez vos clés et objets de dictionnaire comme propriétés et définissez-les en utilisant self.keys = ... afin de pouvoir y accéder correctement.

+0

@ Mattog1456: En regardant le code mis à jour dans votre question, je pense que vous aurez également besoin de faire une propriété de dictionnaire et le définir en utilisant self.dictionary. Pour vérifier le dictionnaire a les données, dans titleForRow, avant le retour, ajoutez 'NSLog (@" dict =% @ ", dictionnaire);'. Est-ce qu'il montre les données du dictionnaire? – Anna

+0

Merci beaucoup aBitObvious J'ai mis le dictionnaire avec soi-même. et ça marche, applaudissements. – Mattog1456

+0

Génial. J'aurais dû expliquer: en déclarant en tant que propriétés, une partie de la gestion de la mémoire a été prise en charge pour vous et s'est assurée que les données que vous avez assignées au var sont conservées pour une utilisation ultérieure. Voir [this] (http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/ObjectiveC/Articles/ocProperties.html%23//apple_ref/doc/uid/TP30001163-CH17-SW1) dans les docs pour plus de détails. En outre, vous devriez libérer ces propriétés dans dealloc pour éviter une fuite de mémoire (par exemple, '[release];', etc). – Anna