0

J'ai une application basée sur les données de base sur laquelle je travaille, qui utilise un EditingViewController pour contrôler un certain nombre d'éléments d'interface utilisateur différents qui reçoivent des entrées de l'utilisateur qui décrivent les attributs d'un objet qui est ensuite stocké dans mon application. Le fichier EditingViewController.xib contient des éléments tels que datePicker, textField, numberSlider et où mon problème provient d'un UIPickerView, qui sont tous contrôlés dans une vue à l'aide des expressions .hidden = YES/NO;. Mon problème est que j'ai besoin de remplir un UIPickerView dans deux écrans séparés, qui doivent avoir deux sources NSMutableArray différentes. Dans ma méthode viewDidLoad configurer mon premier NSMutableArray:UIPickerView avec 2 NSMutableArrays?

listOfItems = [[NSMutableArray alloc] init]; 
[listOfItems addObject:@"Greenland"]; 
[listOfItems addObject:@"Switzerland"]; 
[listOfItems addObject:@"Norway"]; 
[listOfItems addObject:@"New Zealand"]; 
[listOfItems addObject:@"Greece"]; 
[listOfItems addObject:@"Rome"]; 
[listOfItems addObject:@"Ireland"]; 

Et après cela, je peupler mon sélecteur UIPickerView * avec ce code:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)picker; 
{ 
    return 1; 
} 

- (void)pickerView:(UIPickerView *)picker didSelectRow:(NSInteger)row inComponent: (NSInteger)component 
{ 
    label.text= [listOfItems objectAtIndex:row];// The label is simply setup to show where the picker selector is at 
} 

- (NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component; 
{ 
    return 8;//[listOfItems count]; 

} 

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component; 
{ 
    return [listOfItems objectAtIndex:row]; 
} 

Et cela fonctionne très bien pour le premier attribut et tableau. Alors après cela, quand une autre uitableviewcell est sélectionnée, le sélecteur est caché picker.hidden = YES; et j'ai besoin d'un autre sélecteur, picker2 apparaît avec un tableau différent d'informations. Mais quand j'essaye de dupliquer le processus, en configurant un nouveau sélecteur, en l'appelant picker2, et en essayant de le remplir avec un NSMutableArray différent que j'ai créé juste à côté du premier (tout cela parce que dans mon EditingViewController de la même vue, en appelant simplement différents éléments de l'interface utilisateur en fonction de la vue) Je ne peux pas faire en sorte que picker2 soit rempli avec le nouveau tableau. Je ne sais pas comment le configurer afin que mes deux tableaux différents puissent être peuplés. Ai-je besoin de deux vues de sélecteur? Peut-il être fait avec un seul? Quelle est la syntaxe correcte dans la méthode - (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component; pour rendre les deux tableaux visibles séparément? J'espère que quelqu'un pourra m'aider à ce sujet, merci d'avance!

Répondre

3

Vous demandez d'utiliser le même objet que le délégué pour deux sélecteurs.

Dans chacune des méthodes déléguées, le sélecteur est fourni comme premier argument dans ce but. Vous pouvez vérifier quel sélecteur est transmis et renvoyer les données appropriées pour ce sélecteur.

Par exemple, si vous ajoutez une propriété pour la première sélecteur nommée « pickerOne » et vous deuxième réseau mutable est appelé « arrayTwo », les méthodes de délégué se présente comme suit:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)picker; 
{ 
    return 1; // assuming both pickers only have 1 component 
} 

- (void)pickerView:(UIPickerView *)picker didSelectRow:(NSInteger)row inComponent: (NSInteger)component 
{ 
    // The label is simply setup to show where the picker selector is at 
    if (picker == self.pickerOne) { 
     label.text= [listOfItems objectAtIndex:row]; 
    } else { 
     label.text= [arrayTwo objectAtIndex:row]; 
    } 
} 

- (NSInteger)pickerView:(UIPickerView *)picker numberOfRowsInComponent:(NSInteger)component; 
{ 
    if (picker == self.pickerOne) { 
     return [listOfItems count]; 
    } else { 
     return [arrayTwo count]; 
    } 
} 

- (NSString *)pickerView:(UIPickerView *)picker titleForRow:(NSInteger)row forComponent: (NSInteger)component; 
{ 
    if (picker == self.pickerOne) { 
     return [listOfItems objectAtIndex:row]; 
    } else { 
     return [arrayTwo objectAtIndex:row]; 
    } 
} 

En outre, vous pouvez peupler votre tableau comme ceci (si vous avez juste une liste statique de chaînes, le tableau n'a pas besoin d'être mutable):

listOfItems = [[NSArray alloc] initWithObjects:@"Baptisms",@"Greenland",@"Switzerland",@"Norway",@"New Zealand",@"Greece",@"Rome",@"Ireland",nil]; 
+0

Wow, merci! C'était parfait! – Steve