Partage
  • Partager sur Facebook
  • Partager sur Twitter

[iOS] passer une variable entre plusieurs vue

Sujet résolu
    13 août 2012 à 9:23:43

    Bonjour,

    Avec xcode 4.4, comment fait-on pour accéder aux variables d'une autre vue?

    Il y a beaucoup de tutos sur le net, mais tous utilise l'ajout d'une vue via un code, pas avec le "drag and drop".

    Je m'explique: J'ai déjà mis en page mes vues, je les ait déjà jointes ensemble avec l'interface graphique. Je ne veux pas ajouter une nouvelle vue, elle existe déjà. Par contre je veux faire passer une donnée entre: quand on clic sur le contrôle qui fait passer d'une vue a l'autre, une variable (disons un entier) est transmise à la seconde vu qui peut l'utiliser.
    • Partager sur Facebook
    • Partager sur Twitter
      14 août 2012 à 1:25:45

      Tu dois forcement te taper du code pour ca (passer une variable d'une vue vers une autre), mais si tu est sur iOS5 c'est plus simple, tu peux créer un segue entre les deux vues (via ton interfance builder) et ensuite tu implémente la methode prepareForSegue:sender dans le controleur de ta vue parente et dedans tu envoie ta variable.
      • Partager sur Facebook
      • Partager sur Twitter
        14 août 2012 à 5:26:38

        merci pour la réponse: un plus, un petit bout de code pour ceux qui ont le même soucis.


        ViewController1.m

        #import "ViewController1.h"
        #import "ViewController2.h"
        //....
        
        
        - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
        {
            if ([[segue identifier] isEqualToString:@"monLienDeConnection"])
            {
                ViewController2 *vc2 = [segue destinationViewController];
                vc2.maVariableATransmettre= 1;
                
            }
        }
        


        ViewController2.h

        @synthesize maVariableATransmettre = _maVariableATransmettre;
        


        ViewController2.m
        - (IBAction)unBouton:(id)sender {
        unLabel.text = [NSString stringWithFormat:@"%d", _maVariableATransmettre];
        }
        

        • Partager sur Facebook
        • Partager sur Twitter
          16 août 2012 à 16:30:12

          salut j'ai essayé de faire comme toi, mais moi j'ai des NSNumber mais ça joue pas d'ailleurs j'ai mis mon code dans un autre forum qui s'appelle Récupérer une valeur.

          J'arrête pas d'essayer des trucs mais rien ne fonctionne… est-ce que tu peux détailler ce que tu as fait…

          merci
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 août 2012 à 2:02:39

            J'aimerais aussi un peu plus d'explocations si c'est possible :)
            • Partager sur Facebook
            • Partager sur Twitter
              17 août 2012 à 4:48:04

              Alors, je vais prendre un exemple simple.

              Je veut faire passer un entier (le chiffre 2) de la vue ViewController sur la vue ViewController2. Sur la vue 2, j'appuie sur un bouton, et le chiffre s'affiche dans un label.

              Donc je prend un projet single view, j'ajoute une seconde vue, j'ajoute une classe ViewController2, je clic sur la seconde vue, onglet "show thé identity inspector et dans le champs classe je met ViewController2. J'ajoute un bouton sur la vue 1, pour passer sur la vue 2. J'ajoute un bouton et un label sur la vue 2.

              Je clic sur le bouton de la vue2, je le drop sur ViewController2.h en lui donnant le nom clic et en sélectionnant la connexion action, je fait de même pour le label, que je nomme valeur.

              Ensuite je clic sur la vue 1, Editor -> embed in -> navigation Controller.

              Enfin je retourne sur la vue 1, je clic sur le bouton je maintiens ctrl puis je relâche sur la vue 2.

              Ici rien de nouveaux, il s'agit juste de créer une app qui permet de passer d'une vue sur l'autre.


              La super important, cliquez sur le lien qui relie la vue 1 et 2 et dans le panneau de droite allez dans l'onglet "show the attributes inspector":
              Vous avez un champs identifier, donnez un nom. Pour moi, j'ai mis: links.

              Pour le reste c'est du code je vous met les fichiers avec des commentaires:

              ViewController.h
              #import <UIKit/UIKit.h>
              
              @interface ViewController : UIViewController
              
              @property int monEntier; //la variable de depart
              @end
              



              ViewController2.h
              #import <UIKit/UIKit.h>
              
              @interface ViewController2 : UIViewController
              - (IBAction)clic:(id)sender; // le bouton sur lequel je clic pour afficher mon entier
              
              @property (weak, nonatomic) IBOutlet UILabel *valeur; // le label ou j'affiche mon entier
              
              @property int monEntierTransmis; // le nom de ma variable transmise
              @end
              




              ViewController.m
              #import "ViewController.h"
              #import "ViewController2.h" // SUPER IMPORTANT il fut importer le leader de la seconde vue
              
              @interface ViewController ()
              
              @end
              
              @implementation ViewController
              @synthesize monEntier; //ma variable de depart
              
              - (void)viewDidLoad
              {
                  [super viewDidLoad];
              }
              
              - (void)viewDidUnload
              {
                  [super viewDidUnload];
              }
              
              - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
              {
                  return YES;
              }
              
              - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
              {
                  if ([[segue identifier] isEqualToString:@"links"]) //links est le nom de la conexion entre la vue 1 et 2
                  {
                      ViewController2 *vc2 = [segue destinationViewController];
                      
                      self.monEntier = 2; // je met 2 pour mon entier, vous pouvez le modifier dans une autre méthode, perso j'ai fait simple
                      vc2.monEntierTransmis = monEntier; // mon monEntierTransmis est le nom de ma variable pour la vue 2, je lui assigne la valeur de mon entier de départ
                      
                      
                  }
              }
              
              @end
              


              ViewController2.m
              #import "ViewController2.h"
              
              @interface ViewController2 ()
              
              @end
              
              @implementation ViewController2
              @synthesize valeur;
              @synthesize monEntierTransmis = _monEntier; // SUPER IMPORTANT monEntier est le noms de ma variable de depart 
              
              - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
              {
                  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
                  if (self) {
                  }
                  return self;
              }
              
              - (void)viewDidLoad
              {
                  [super viewDidLoad];
              }
              
              - (void)viewDidUnload
              {
                  [self setValeur:nil];
                  [super viewDidUnload];
              }
              
              - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
              {
                  return (interfaceOrientation == UIInterfaceOrientationPortrait);
              }
              
              - (IBAction)clic:(id)sender {
                  valeur.text = [NSString stringWithFormat:@"%d", _monEntier]; // ici j'affiche le chiffre 2, _monEntier me permet d'accéder a ma variable de départ
              }
              @end
              
              • Partager sur Facebook
              • Partager sur Twitter
                17 août 2012 à 9:41:49

                et si on pas de bouton pour passer d'une vue à l'autre car c'est des TabBar et l'utilisateur choisi de cliquer ou non sur l'onglet.
                J'aimerai que le chiffre (int) passe lorsque l'utilisateur scanner un QR-Code.
                Voici mon storyboard: http://www.siteduzero.com/upload-216-3 [...] extarea=texte
                Sans bouton je ne vois pas comment faire… Merci beaucoup
                • Partager sur Facebook
                • Partager sur Twitter
                  17 août 2012 à 10:46:52

                  Je suis moi aussi novice, et je ne sais pas comment faire avec des TabBar
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    17 août 2012 à 13:53:43

                    Citation : Adrienne Villar

                    et si on pas de bouton pour passer d'une vue à l'autre car c'est des TabBar et l'utilisateur choisi de cliquer ou non sur l'onglet.
                    J'aimerai que le chiffre (int) passe lorsque l'utilisateur scanner un QR-Code.
                    Voici mon storyboard: http://www.siteduzero.com/upload-216-3 [...] extarea=texte
                    Sans bouton je ne vois pas comment faire… Merci beaucoup



                    Tu ne peux pas mettre le code dans le viewdidload qui correspond à l'onglet ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      17 août 2012 à 14:00:15

                      Dans ViewControllerScan je peux pas car ma valeur n'est pas encore connu à ce moment là.
                      Dans ViewControllerData, c'est là que j'essai de récupérer ma valeur.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 août 2012 à 16:34:49

                        // On va chercher le contrôleur du tab 2 dans le tabBarController :
                        ViewControllerData *controller = [self.tabBarController.viewControllers objectAtIndex:1];

                        // Pour bien faire, il faudrait vérifier si on a vraiment obtenu un résultat,
                        // et assigner un nouveau contrôleur tout neuf si ce n'est pas le cas…
                        // [[ViewControllerData alloc] initWithNibName:@"ViewControllerData" bundle:nil];
                        // à la limite, vérifie que l'objet n'est pas nul avec un log :
                        NSLog(@"Mon objet qui ne doit pas être nul : %@", controller);

                        // Passage du nombre
                        [controller setMyNumber:[NSNumber numberWithInt:resultatChiffre.intValue]];

                        self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:1];

                        La réponse
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [iOS] passer une variable entre plusieurs vue

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown