2009-04-20 7 views
21

Je veux créer 2 sélecteurs distincts dans la même vue en utilisant le même viewController. Mais comment définir des délégués séparés et une source de données pour eux?PickerViews multiples dans une vue?

Je n'arrive pas à le faire fonctionner. Ils apparaissent avec les mêmes données. Si vous avez un exemple de code sur ce sujet, il sera très apprécié.

Merci.

Répondre

32

Notez que chaque méthode à la fois la source de données et les protocoles délégué contiennent un paramètre UIPickerView *, par exemple:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 

Vous devez l'utiliser pour établir une distinction entre vos deux instances, comme suit:

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 

    if([pickerView isEqual: pickerOne]){ 
     // return the appropriate number of components, for instance 
     return 3; 
    } 

    if([pickerView isEqual: pickerTwo]){ 
     // return the appropriate number of components, for instance 
     return 4; 
    } 
} 
+0

cela fonctionne très bien, merci .. seul problème est que je reçois un avertissement disant « avertissement - fin de la fonction de contrôle pour atteindre non vide » connaissez-vous Pourquoi? –

+1

ahh .. D'accord, c'était parce qu'il pourrait finir par ne rien retourner, donc ajouté le else {return 0; } et l'erreur a disparu ... Merci encore à vous deux .. Grosse helt: D –

+0

comment puis-je attribuer différentes valeurs de tableau à ces deux UIPIckers différents – MaheshBabu

15

La méthode la plus simple consiste à utiliser la propriété tag du sélecteur. Je définis généralement ceux-ci dans l'en-tête pour plus de lisibilité. Vous pouvez définir la balise dans Interface Builder ou dans le code.

#define kPickerOne 0 
#define kPickerTwo 1 

ensuite dans votre fichier d'implémentation ...

-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    if(pickerView.tag == kPickerOne) 
    { 
      // do something with picker one 
    } 
    else if(pickerView.tag == kPickerTwo) 
    { 
      // the other picker 
    } 
} 
Questions connexes