Remplir une liste déroulante et récupérer la valeur.

Bonjour,

Je suis en train de développer une application en Objective-C sur Xcode et j'aurai besoin de créer une liste déroulante afin de permettre à  un utilisateur de sélectionner simplement et rapidement une donnée, que j'aimerai récupéré en vue d'un affichage sur une autre vue.

Pour cela, je suis partie sur un PickerView (ce qui se rapproche le plus d'une liste déroulante je pense) que j'aimerai remplir. J'ai fait un tableau (NSArray) que je rempli grâce à  une plist. :

self.tabEntreprises = [NSArray arrayWithContentsOfFile:NSBundle mainBundle] pathForResource:@"clients" ofType:@"plist";

Puis, j'aimerai lier ce tableau (et donc ma plist) à  mon PickerView

Comment faire ?

Merci :)

PS: désolé mais je ne sais pas pourquoi mon message n'est pas mis en page comme je l'écris... Pas de saut de ligne... Et je ne connais pas la balise code :/

Réponses

  • AliGatorAliGator Membre, Modérateur
    Il faut que tu affectes les propriétés "delegate" et "dataSource" de ton UIPickerView à  ton UIViewController (genre "picker.delegate = self" et "picker.dataSource = self"), puis que tu implémentes ensuite les méthodes des protocoles UIPickerViewDelegate et UIPickerViewDataSource dans ton UIViewController pour lui indiquer le nombre de rows du picker et le texte à  utiliser pour chaque row du Picker etc.
  • KuneruKuneru Membre
    juin 2015 modifié #3

    Il faut que tu affectes les propriétés "delegate" et "dataSource" de ton UIPickerView à  ton UIViewController (genre "picker.delegate = self" et "picker.dataSource = self"), puis que tu implémentes ensuite les méthodes des protocoles UIPickerViewDelegate et UIPickerViewDataSource dans ton UIViewController pour lui indiquer le nombre de rows du picker et le texte à  utiliser pour chaque row du Picker etc.

    Okay pour les lignes delegate et dataSource ! Par contre j'ai un avertissement : Assigning to 'id __nullable' from incompatible type 'QuestionViewController *const __strong' Le reste tu m'as perdu ^^
  • CéroceCéroce Membre, Modérateur
    juin 2015 modifié #4
    QuestionViewController doit se conformer aux deux protocoles cités par Ali (à  écrire dans la déclaration de la classe).
  • Désolé je ne comprends pas, pour le moment j'ai uniquement ça dans la déclaration de ma classe : soit QuestionViewControleur.h :

    @interface QuestionViewController : UIViewController

    @property (strong, nonatomic) IBOutlet UIPickerView *listeEntreprises;

    @property (nonatomic, strong) NSArray* tabEntreprises;



    @end
  • CéroceCéroce Membre, Modérateur

    QuestionViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
  • Ah merci ! L'avertissement a bien disparu. Maintenant comment puis-je faire le lien entre mon tableau, qui contient les clients de mon plist, à  mon PickerView (listeEntreprise) ?
  • CéroceCéroce Membre, Modérateur

    Il faut que tu affectes les propriétés "delegate" et "dataSource" de ton UIPickerView à  ton UIViewController (genre "picker.delegate = self" et "picker.dataSource = self"), puis que tu implémentes ensuite les méthodes des protocoles UIPickerViewDelegate et UIPickerViewDataSource dans ton UIViewController pour lui indiquer le nombre de rows du picker et le texte à  utiliser pour chaque row du Picker etc.

  • AliGatorAliGator Membre, Modérateur

    Ah merci ! L'avertissement a bien disparu. Maintenant comment puis-je faire le lien entre mon tableau, qui contient les clients de mon plist, à  mon PickerView (listeEntreprise) ?

     
     

    Un peu de lecture pour t'aider à  comprendre les protocoles et comment se conformer à  un protocol comme UIPickerViewDataSource ou UIPickerViewDelegate

  • Merci, concernant ce que tu dis Ali, c'est fait ou presque. J'en suis au fonction, je pense que c'est ça qu'il faut utiliser donc voilà  ce que j'ai fait :

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

    return self.tabEntreprises.count;

    }

    et


    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{

    return ....

    }



    Je suppose que c'est ça mais je ne sais pas quoi mettre dans la deuxième fonction... La deuxième fonction va afficher le texte si je comprends bien ? Et la première sert à  compter le nombre de ligne ?
  • Rien à  voir, mais ça serait possible d'espace un peu ton texte @Kuneru? Ou au moins utiliser les balises codes ?

    Car là , tout collé, c'est assez dur à  lire.


  • Je veux bien mais quand je fais un retour à  la ligne, ce n'est pas reconnue et c'est tout collé...
    Comment j'utilise la balise code ?
Connectez-vous ou Inscrivez-vous pour répondre.