TabBarApplication : changer de selectedViewController
Bonjour,
Mon projet se termine, je navigue de vues en vues à l'aide d'une tabbar.
Chaque sections de ma tabBar est en fait chargée à partir d'un .xib qui contient une vue qui est elle même controllée par un UIViewController propre.
Je souhaite créer un menu un peu comme celui qui se crée automatiquement (more ...) lorsqu'on ajoute plus de 5 items à notre tabBar:
A la différence que le miens ne doit pas être une gridView car je ne veux pas une nouvelle barre en haut de mon écran qui va me bouffer de la place uniquement pour revenir en arrière.
Il faudrait que je puisse afficher mes items Quizz, Pendu et Liste dans une view Activité comme ca:
Ici la navigation se fait simplement en cliquant un bouton.
Si on clique sur le bouton Quizz, on remplace la vue du menu Activités par la vue du Quizz et si on veut faire un Pendu on clique sur un bouton retour en haut de ma vue quizz pour remplacer cette dernière par la vue de menu des Activités et permettre à l'utilisateur de repartir vers la vue du Pendu.
C'est donc une sorte de double navigation.
Comment faire pour changer de UIView et de UIViewController lorsque l'utilisateur clique sur un bouton de ma vue Activité?
J'imagine qu'il faut agir du coté de mon tabBarController en lui passant par exemple tabBarController.selectedViewController = quizzViewController mais je ne sais pas comment y accèder à partir de mon activiteController.
Merci,
Mon projet se termine, je navigue de vues en vues à l'aide d'une tabbar.
Chaque sections de ma tabBar est en fait chargée à partir d'un .xib qui contient une vue qui est elle même controllée par un UIViewController propre.
Je souhaite créer un menu un peu comme celui qui se crée automatiquement (more ...) lorsqu'on ajoute plus de 5 items à notre tabBar:
A la différence que le miens ne doit pas être une gridView car je ne veux pas une nouvelle barre en haut de mon écran qui va me bouffer de la place uniquement pour revenir en arrière.
Il faudrait que je puisse afficher mes items Quizz, Pendu et Liste dans une view Activité comme ca:
Ici la navigation se fait simplement en cliquant un bouton.
Si on clique sur le bouton Quizz, on remplace la vue du menu Activités par la vue du Quizz et si on veut faire un Pendu on clique sur un bouton retour en haut de ma vue quizz pour remplacer cette dernière par la vue de menu des Activités et permettre à l'utilisateur de repartir vers la vue du Pendu.
C'est donc une sorte de double navigation.
Comment faire pour changer de UIView et de UIViewController lorsque l'utilisateur clique sur un bouton de ma vue Activité?
J'imagine qu'il faut agir du coté de mon tabBarController en lui passant par exemple tabBarController.selectedViewController = quizzViewController mais je ne sais pas comment y accèder à partir de mon activiteController.
Merci,
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faut donc que je prépare 4 tableaux de controllers différents pour chaque cas de figure:
- Activité
- Quizz
- Pendu
- Draglist
Le tableau de controllers par défaut étant celui de "Activité", je changerai par celui de Quizz si on press le bouton Quizz comme ça on retrouvera à la place de la section Activité une section Quizz (ndlr: la section étant un élément du tabbar, sur mon dernier screenshot, on a section : Expert, Fiches, Activités, Quizz, More).
Voici comment je procède:
-> j'ajoute toute les sections possibles à ma tabBarApplication via InterfaceBuilder.
-> je copie le self.tabBarController.viewControllers (comprenant toutes les sections) dans un nouveau tableau: copyViewControllers
-> je crée un customViewControllers avec les sections par défaut (Expert, Fiches, Activités, Application, Forum) en retirant les viewControllers que je ne souhaite pas afficher.
Tout fonctionne comme je le veux jusque ici, voici le code:
Voici ce que j'obtiens donc:
Maintenant je vais créer 3 autres "customViewControllers", un pour Quizz, un pour Pendu et un pour dragList histoire de remplacer le tableau de controllers par celui qui contient les sections que je veux en fonction du choix de l'utilisateur dans "Activités" avec la méthode:
[self.tabBarController setViewControllers:monNouveauTableaudeControllers];
C'est ici que les choses se compliquent car je le fait dans une classe externe, celle du controller de "Activité" et je n'arrive pas à récupérer mon "copyViewControllers" que j'ai déclaré dans la classe : "PolytechnicumAppDelegate".
Voici mon code pour le controller Activité:
Le NSLog retourne (null), pourquoi?
Pensez-vous que ma solution soit correcte?
J'ai essayé de chercher par moi même mais là je ne sais vraiment pas si c'est la bonne solution, toute aide est vraiment la bien venue, d'avance, merci
Je continue mes péripéties seul, on verra si quelqu'un peut venir me conseiller...
Afin de simplifier le code et les explications j'ai tout regroupé dans la même classe (celle de mon Application).
Voici donc comment je procède, ici vous comprendrez rapidement mon raisonnement:
Je suis sur la bonne voie car lorsque je charge mon application au démarrage si je sélectionne un de ces tableaux de controllers pour mon tabBar j'obtiens exactement ce qu'il faut!
Screenshot d'exemple si je décommente comme ceci:
J'ai mis un timer pour voir si je pouvais changer dynamiquement le tableau de controllers mais mon application crash. Une idée?
Si tu veu que cela slide utilise le navigationController de ton controlleur principal, sinon tu removeFromSuperview le controlleur qui affiche toutes tes images et tu addSubview avec le controlleur choisi.
C'est juste une piste.
Je me suis peut être bien compliqué la tâche, le truc c'est que je ne vois pas comment déclarer un nouveau contrôleur de Quizz par exemple pour le balancer à la place de celui de mes images (activiteController) en utilisant addSubview et removeFromSuperView.
Car je n'ai pas de NavigationController vu que je ne suis pas dans un GridView (enfin jme plante peut être...).
Voici ce que donne mon MainWindow.xib:
Enfin je vais chercher de ce coté car j'étais partit dans une autre direction, merci pour la réponse je commençait à désespérerÂ
Il semble que :
Soit plus adapté à ce que je recherche, sauf que quand je change "dynamiquement" ceci ça crash alors qu'au lancement de l'application si je change custromQuizzViewControllers par un autre j'obtiens bien la liste des controllers que je veux pour mon tabBar.
Comment le faire dynamiquement sans que l'appli crash? Peux être faut-il refresh quelque chose quelque part...?
Un log du crash:
Pour résoudre cela tu peu comme dis dans le post, créer un singleton de ton navigationController principal, soit y accéder par ton appDelegate meme si c'est déconseillé ou alors comme moi j'ai fait créer une propriété qui t'y permet d'accéder comme le NSIndexPath.
Par contre je viens de résoudre mon problème autrement et simplement (car mon code était bon en fait!) enfin.. il y avait une erreur au niveau de la copie de mon MutableArray.
C'est comme ca qu'il faut faire:
Merci pour tes réponses, je m'empresse de boucler mon projet (il n'est pas exclu que j'ai de nouveau besoin d'aide d'ici là )
Merci en particulier à Philippe49 et AliGator qui ont passé pas mal de temps à bien m'expliquer.
ps: il y a de fortes chances pour que je continue à trainer dans le coin pour améliorer tout ça et faire de nouvelles choses.
Ajoute le dans les projets finis quand Apple l'aura validé.