Changer de vue à partir du code
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
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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) :
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 :
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).
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 ?
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 ?
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 ?
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
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.
+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
et il faut activer le segue dans la méthode methode: avec le bout de code
Ok c'est bon, merci à tous pour votre patience
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