Changer de vue à  partir du code

tbilletbille Membre

Bonjour à  tous,


 


Je suis actuellement en train de faire une appli iPad, mon souci : depuis que j'ai commencé à  coder j'utilise le storyboard pour créer mes vues ( je suis encore débutant je sais qu'il faut pas apprendre comme ça, mais passons ces petits détails ::) ).


 


Mais il se trouve que maintenant j'ai besoin de créer un bouton dans le code, ceci ne pose pas trop de problème, j'aimerai que quand je clique sur le bouton il me redirige vers une autre vue. Mais je ne trouve que des tutos qui utilisent le storyboard...


 


En creusant je crois que je devrais me diriger vers cette méthode:



[monBouton addTarget:self action:@selector(methode:) forControlEvents:UIControlEventTouchUpInside];

Mais je ne vois pas du tout comment celle ci me redirige...


 


Merci à  tous


tbille


 


Mots clés:

Réponses

  • KubernanKubernan Membre
    mai 2013 modifié #2

    Salut,


     


    Tu as deux possibilités : instancier ton vu controller toi même (1) ou faire appel à  un segue manuel (2).


     


    Ton boutton va appeler la méthode methode: mais tu peux lui donner un autre nom évidement, quelque chose de plus parlant.


    Dans cette méthode tu peux faire (1) :



    MonViewController *monViewController = [self.storyboard instantiateViewControllerWithIdentifier:@IdentifiantDeMonViewController];
    // mà j des propriétés de monViewController si besoin
    [self.navigationController pushViewController:monViewController animated:YES]; // cas d'un push

    Ou bien (2) :


     


    Tu créés un segue manuel, c'est-à -dire un segue qui part de ton view controller directement (et non pas d'un élément de ta scene) vers ton view controller de destination. Ainsi dans ta methode tu peux faire :



    [self performSegueWithIdentifier:@IdentifiantDeMonSegue sender:monButon];

    Et du coup tu peux intercepter ton segue comme d'hab avec - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender


     


     


    Cette dernière méthode est préférable dans le sens où ton storyboard contient l'information d'une transition d'un view controller vers un autre, tu as ainsi une certaine cohérence dans ton code.


     


    Tu peux également envisager de créer ton bouton dans Storybard et le maintenir caché tant que tu n'en as pas besoin (si cela s'avère judicieux, je ne connais pas ton besoin réel).


  • tbilletbille Membre

    En utilisant ta deuxième méthode, créer manuellement mon segue.


     


    Quand je clique sur le bouton celui ci va bien dans ma méthode prepareForSegue()


     


    Mais il m'affiche un message d'erreur, eet ne se déplace pas à  la vue demandée :


        Warning: Attempt to present <maVue2: 0x1e56e0a0> on <maVueDepart: 0x1ec3e000> whose view is not in the window hierarchy!

  • Le bouton est-il dans la vue qui est contrôlée par le contrôleur qui est l'origine de ton segue manuel ?


  • tbilletbille Membre
    mai 2013 modifié #5

    le bouton est dans ma maVueDepart qui veux aller vers la mavue2.


     


    Donc oui il est dans le même contrôleur que le segue.


  • Tu as mis où le bout de code ?



    [self performSegueWithIdentifier:@IdentifiantDeMonSegue sender:monButon];
  • tbilletbille Membre

    dans le viewdidload juste après avoir créé le bouton


  • D'où est issu ton controller maVueDepart ? C'est le controller initial ? Il fait parti d'un navigation controller ?


  • KubernanKubernan Membre
    mai 2013 modifié #9


    dans le viewdidload juste après avoir créé le bouton




     


    Pas bon ! Essais dans viewDidAppear plutôt.


     


    Edit : Je comprends pas pourquoi tu fais appel à  cette fonction alors qu'elle est censée être appelée dans la méthode déclenchée par la bouton.


  • Ok c'est bon mais mon souci est que dès que j'arrive sur la vue il m'envoie directement vers la vue suivante




  • Ok c'est bon mais mon souci est que dès que j'arrive sur la vue il m'envoie directement vers la vue suivante




     


    J'ai édité mon post.


    Ton bouton est censé déclencher une action en appelant une méthode. C'est dans cette méthode que tu dois coder le perform de ton segue.



  • Pas bon ! Essais dans viewDidAppear plutôt.


     


    Edit : Je comprends pas pourquoi tu fais appel à  cette fonction alors qu'elle est censée être appelée dans la méthode déclenchée par la bouton.




     


    +1


     


    Il faut ajouter une action au bouton en même temps qu'on le crée, vraisemblablement dans viewDidLoad avec un bout de code du genre



    [monBouton addTarget:self action:@selector(methode:) forControlEvents:UIControlEventTouchUpInside];

    et il faut activer le segue dans la méthode methode: avec le bout de code



    [self performSegueWithIdentifier:@IdentifiantDeMonSegue sender:monButon];
  • tbilletbille Membre
    mai 2013 modifié #13

    Ok c'est bon, merci à  tous pour votre patience o:)


     


    tbille


     


    En fait petite modification,


     


    le segue fonctionne si celui-ci à  déjà  été déclaré dans le storyboard...


    Je faisait mes tests sur une fenêtre qui est accessible par un autre bouton déclaré dans le storyboard.


    Maintenant je veux le créé manuellement, mon bouton est bien la mais dès que je lui attribut un nouveau segue, je reçois une exception...


     


    NSIvalidException, no segue with identifier 'calculate'


     


    calculate étant le segue que je viens de créer


Connectez-vous ou Inscrivez-vous pour répondre.