Application multi-vue

Bonjour à  tous,



je souhaiterais créer une application basé sur le concept multi-vue. Dans un premier temps, au lancement de mon application, une vue (vue 1) s'affiche, le temps d'un traitement.

En fonction du résultat de mon traitement, mon application peut être amené à  afficher intuitivement la vue 2 ou la vue 3.



Comment faire? J'ai déjà  fait une application (Basique) multi-vu, mais qui passer d'une vue à  l'autre, grâce à  des round rect button (Pas besoin de modifier le code pour cela).



Voila si quelqu'un à  une idée SVP?

Réponses

  • Quel genre de traitement fais-tu ?

    Pour faire simple, il faut que tu sois notifié par la FIN de ce traitement.

    Ensuite c'est le même principe que tes exemples précédents avec des boutons. (pushViewController, presentModalViewController, addSubview...)
  • Le traitement est simple, à  la première vue (Qui au passage ne contient rien, sauf un label), le programme devra allé voir dans le bac à  sable, si certain élément sont renseigné ou pas. Si les éléments sont renseigné, j'accède directement à  une vue qui pour le moment ne contient qu'un label et si ils ne sont pas renseigné, j'accède dans ce cas là , à  une autre vue (Un formulaire).



    Sinon, j'ai pas très bien compris ton principe (Désolé je débute)
  • yass_1988yass_1988 Membre
    avril 2012 modifié #4
    Bonjour, je vous relance suite à  ce sujet, si quelqu'un a une idée, je pensais créer deux nouvelles classes, de type UIViewController et pour chacun leur fichier .xib, et du coup essayer dans la méthode viewDidLoad de mon tout premier contrôler trouver un mécanisme qui au lancement et selon des conditions( Pour le moment on sous fout de ces conditions) de choisir d'afficher tel vue ou une autre .

    Des idées, un exemple ?
  • Il me semble que tu ne pourras pas faire cela dans viewDidLoad.. mais plutôt dans viewDidAppear

    Après pour passer à  une vue suivante, tu as plusieurs manière de faire, mais je pense que la meilleure chose à  faire est d'encapsuler ton premier contrôleur dans un UINavigationController et d'utiliser pushViewController.



    (Mais je ne suis pas sûr du tout de ce que j'avance...)
  • D'accord, donc si je suis ton raisonnement, je crée un un projet de type single view application, dans le storyboard j'ajoute à  ma vu un contrôle NavigationContrôler( de type UINavigationController), je rajoute deux autres contrôle ViewControle(de type UiViewControl) à  l'extérieur de ma vue.



    Et du coup après, comme faire les lien entre les différente vue, sans utiliser de bouton ? et au niveau du code comment faire ?



    J'aimerais bien y arriver, car c'est que le début de mon projet et le reste, reste de mon niveau pour le moment.
  • KixxxKixxx Membre
    avril 2012 modifié #7
    Quel lien ? Utilises pushViewController ...


    <br />
    - (void)viewDidAppear {<br />
    if (conditon1) [self.navigationController pushViewController:condition1ViewController animated:YES];<br />
    else if (condition2) [self.navigationController pushViewController:condition2ViewController animated:YES];<br />
    }<br />
    




    Maintenant si vraiment cette distinction se fait au lancement de l'application, tu peux lancer un contrôleur à  la place d'un autre en settant le rootViewController de ta window principale dans ton AppDelegate (- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions)
  • Ok,

    donc résumons, je crée un projet basé sur le model single view application, dans mon storyboard je glisse un objet Navigationcontroller, je crée un lien (clic droit, ctrl) sur mon vue déjà  existante(vue1) et mon Navigation Contrôleur,

    je rajoute un autre objet viewController (vue 2) et je fais pareil, du coup je doit créer une autre classe viewController de type UIViewController?





    Après dans le contrôleur de ma première vue, je défini la méthode viewDidAppear comme tu l'as spécifié ?



    Je suis un peu perdu :/
  • Tu veux y faire quoi dans viewDidAppear en fait ?

    Quand tu parles de vues tu veux dire view controllers ? Quelles sont les scènes de ton storyboard ?
  • En gros je veux au lancement de mon appui, qu'il m'affiche une vue0 avec juste une image en fond d'écran (Bon pour le moment rien de compliquer), cette vue doit durée le temps de réaliser un traitement (En gros allé vérifié dans ma sandbox si certain élément existe ou pas), s'il existe, l'appli doit me basculer vers une autre vue1 (Le contenu de cette vue pour le moment on s'en fiche), sinon me basculer vers une autre vue2 (Qui s'agira en faite d'un formulaire).

    Voila pour le moment ce que je souhaiterais faire.
  • Donc :

    vue1 = 1 view controller dans ton storyboard

    vue2 = 1 autre view controller dans ton storyboard



    Dans storyboard il te faut attribuer un identifiant unique pour chacun des view controllers (champ identifier).

    Il est entendu que chaque view controller correspond à  une sous-classe de ton choix.



    Pour appeler vue1 ou vue2 tu dois alors créer une instance du controller qui te convient avec la méthode instantiateViewControllerWithIdentifier: de la classe UIStoryboard en fournissant l'identifiant qui va bien.



    Ensuite tu "push" cette instance.
  • OK d'accord, imaginons la configuration suivante, je crée un nouveau projet avec le modèle "single View Application", quand j'ouvre mon MainStoryboard_iPhone.storyboard, je découvre une vue prédifinie (View Controller), on va dire que c'est ma vue0.



    Je rajoute du coup dans mon MainStoryboard_iPhone.storyboard, 2 objets View Controller (vue1 et vue2), je leur attribu à  chacun un identifiant unique (Au passage ou trouver ce champ Identifier ? dans mon inspector ?



    Après tout cela, si je t'ai bien compris, je définis deux classes (.h et .m) "identifiantvue1ViewController.h et .m"+ "identifiantvue2ViewController.h et .m" et qui hériteront toute les deux de mon ViewController qui correspond à  ma vue0.



    Bon déjà  avant d'attaquer d'instancer et de pusher, suis-je bon dans mon raisonnement ??
  • 'yass_1988' a écrit:
    OK d'accord, imaginons la configuration suivante, je crée un nouveau projet avec le modèle "single View Application", quand j'ouvre mon MainStoryboard_iPhone.storyboard, je découvre une vue prédifinie (View Controller), on va dire que c'est ma vue0. Je rajoute du coup dans mon MainStoryboard_iPhone.storyboard, 2 objets View Controller (vue1 et vue2), je leur attribu à  chacun un identifiant unique (Au passage ou trouver ce champ Identifier ? dans mon inspector ?




    Jusqu'ici tout va bien.

    La zone qui permet de définir l'identifiant se trouve dans l'inspecteur d'attributs.


    'yass_1988' a écrit:
    Après tout cela, si je t'ai bien compris, je définis deux classes (.h et .m) "identifiantvue1ViewController.h et .m"+ "identifiantvue2ViewController.h et .m" et qui hériteront toute les deux de mon ViewController qui correspond à  ma vue0.




    Non, sauf si j'ai mal compris ce que tu voulais faire.



    Quand tu ajoutes un UIViewController dans ton stoyboard, tu ne peux pas faire grand chose avec n'est-ce pas ? Il faut donc que tu associe ce controller à  une classe que tu as créé et qui elle-même hérite de UIViewController. Une fois que tu as créé cette classe (IdentifiantVue1ViewController pour reprendre ton exemple) tu indique dans storyboard, pour le view controller en question, qu'il est associé à  ta classe : voir la partie Custom Class de l'inspecteur d'identité. Ainsi ce view controller n'hérite plus directement de UIViewController mais de IdentifiantVue1ViewController.
  • yass_1988yass_1988 Membre
    avril 2012 modifié #14
    OK, d'accord, c'est bon je viens réaliser cette étape, c'est ok !!! (merci au passage)

    Donc pour la suite du coup, je dois créer une instance pour chaque contrôler que je viens de créer et putsch ces instances en fonction de mes condition?

    Du coup cette partie se réalise ou et dans quel classe ?

    Est ce dans viewDidLoad du ViewController.m de ma vue0 ?

    Et quand tu dis créer une instance du contrôler, tu veux dire créer un objet de type IdentifiantVue1ViewController ? Par exemple
  • 'yass_1988' a écrit:




    Pas tout à  fait, ça serait plutôt :



    IdentifiantVue1ViewController *vue1ViewController = /color][color=#B41CA4]self[/color][color=#000000].[/color][color=#7134AA]storyboard[/color][color=#000000] [/color]instantiateViewControllerWithIdentifier[color=#000000]:[/color][color=#C72C25]@&quot;Formulaire&quot;[/color][color=#000000;

    IdentifiantVue2ViewController *vue2ViewController = /color][color=#B41CA4]self[/color][color=#000000].[/color][color=#7134AA]storyboard[/color][color=#000000] [/color][color=#401082]instantiateViewControllerWithIdentifier[/color][color=#000000]:[/color][color=#C72C25]@&quot;App&quot;[/color][color=#000000;



    J'attire ton attention sur le scénario de ton application. Que fait réellement vue0 ? Si c'est juste un controller qui affiche un message d'attente il n'est peut-être pas utile. Ne te semble-t-il pas plus judicieux de réaliser ton traitement dans ton app. delegate dès le lancement de ton application plutôt que d'utiliser un view controller dédié ?
  • yass_1988yass_1988 Membre
    avril 2012 modifié #17
    bien en faite l'idée de ma vue0 était d'afficher une image en fond d'écran le temps de vérifier ma condition (Qui peut prendre de 0.1 à  3 seconde max à  réaliser traitement + vérification de la condition).

    Quel serait pour toi la meilleur solution (type du model du projet, gestions des vues, ... )?

    Merci pour ton aide en tout cas.
  • KubernanKubernan Membre
    avril 2012 modifié #18
    Réponse en privé.
Connectez-vous ou Inscrivez-vous pour répondre.