[Résolu] Soucis : Combinaison Tabbar / TableView et NavigationController.
Bonjour tout le monde.
Donc petit souci avec une combinaison d'éléments UITabbarController, de TableViewController et de NavigationController.
Je suis parti d'un template Tabbar. Mon 4eme onglet est censé contenir une TableView avec une navigationBar au dessus.
Le problème c'est que la TableView apparaà®t très bien, mais pas la NavigationBar .
Quel peut-être le problème ?
Merci à vous.
Donc petit souci avec une combinaison d'éléments UITabbarController, de TableViewController et de NavigationController.
Je suis parti d'un template Tabbar. Mon 4eme onglet est censé contenir une TableView avec une navigationBar au dessus.
Le problème c'est que la TableView apparaà®t très bien, mais pas la NavigationBar .
Quel peut-être le problème ?
Merci à vous.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il faudrait la repositionner. Tu peux déjà essayer "bêtement" de la descendre dans IB pour voir si c'est bien ça.
Alors le truc c'est que apparemment, comme je suis sur un UITableViewController, je ne peux pas ajouter de NavigationBar en la glissant sur l'interface. J'ai juste indiqué dans la section "Simulated Metrics" de mon xib que la top bar est une NavigationBar.
De la même manière que j'ai indiqué que la bottom bar est une Tabbar, mais elle, elle s'affiche sans soucis.
Bein justement, cherche pas plus loin.
Si ce sont des simulated metrics, c'est que ce sont des éléments fictifs.
Mais tu l'as ajouté par le code alors ?
Bon sinon fait un UIViewController, et ajoute une tableView avec outlet + ta navigationBar (la vraie) dans IB.
Là , oui c'est normal !
Niveau affichage, ça fonctionne, il me reste plus qu'à regarder comment, par exemple, changer le titre par le code. A ce que je vois self.navigationItem... ne marche pas . Pourtant cela marchait sur un template de TableView.
J'ai bien ajouter <UINavigationBarDelegate, UINavigationControllerDelgate>.
Je regarderait dans la doc ce soir, je ne pourrais pas toucher au code avant.
P.S : j'essairai le self.navigationBar à midi si j'ai le temps.
self.navigationItem doit marcher si tu fais un outlet vers le navigationItem et pas la NavigationBar peut-être...
Par contre, la TableView ne veut rien savoir.
Voici le .h.
et le .m correspondant.
Jamais l'appli ne passe dans "(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath" par exemple.
Dans IB, j'ai lié le delegate et le datasource de ma tableView au File's owner.
Normal tu renvoie aucune section, ni aucune row dans les méthodes précédentes, il va pas aller voir ce qu'il faut afficher...
T'as relié l'outlet du tableView aussi hein ?
Tu as raison sur les 2 points :
Par contre, ce bout de code :
ne fonctionne pas.
Je passe bien dedans, mais ni plantage, ni changement à l'écran.
C'est toujours sur la même classe que précédemment.
Help, c'est un des derniers gros points qui me bloque.[/code]
- ARghhh, une classe sans majuscule, j'ai failli avaler de travers !
detailVoitureController => DetailVoitureController
C'est une convention de nommage quasi-obligatoire.
- pour ton problème, essaie ça:
Pour revenir au soucis, ce n'est pas ça. Comme ça l'appli plante en me disant "Unrecognize selector". C'est pour ça qu'il faut passer par self.navigationController.
Je précise que j'ai bien <UINavigationControllerDelegate, ...> dans mon .h.
(parce plus haut tu parlais de tabbar...)
Je suis à la base, dans une tabbar. Cet onglet de ma tabbar contient une tableView avec une navigationBar en haut, et je voudrais passer à une autre vue en sélectionnant un élément de la tableView.
La tableView est bien remplie, j'ai une navigationBar, mais rien ne se passe quand je sélectionne un élément. Mais le code passe bien dans la procédure que j'ai collé juste avant.
C'est normal que ça marche pas.
Il ne faut pas ajouter une pov' navigation bar... mais un bien tout un mécanisme de NavigationController dans la vue de ta UITabBar... et c'est beaucoup plus compliqué.
D'autre part, je ne sais pas si c'est vraiment recommandé de mettre un UINavigationController dans un seul de tes TabBar... c'est pas très ergonomique tout ça.
IL faudrait faire l'inverse. Mettre un UINavigationController, et dans le rootViewController de celui-là mettre ton UITabBarcontroller, Seul l'onglet concerné aurait un push vers le second écran du navigation Controller.
Mettre un UITabBarController dans un UINavigationController ? ???
Deux problèmes:
- point de vue technique: D'après la doc d'Apple, un UITabBarController DOIT être en root!
- point de vue ergonomique: dès que tu push un nouveau viewController, tu ne vois plus ta tabBar!
Sinon ceburo, il faut bien mettre ton controller contenant ta tableView dans un UINavigationController et lui même dans ta TabBarController.
Bah, oui, donc il peut très bien être dans le rootViewController du UINavigationController.
Oui, mais c'est pas forcément utile, surtout si ce qui est dans le deuxième écran ne se rapporte qu'au contenu du tab bar en question.
Maintenant, il a les 2 choix, ça dépend du contexte et de ce qu'il veut faire.
Mais dans tous les cas, il faudra une vraie instance de UINavigationController, ce qu'il n'a pas fait.
Doc apple:
Sinon effectivement il lui faut une instance de UINavigationController
Mais bien entendu, aucun changements à l'écran.
Maintenant à l'éxécution, la NavigationBar n'apparaà®t plus. Mais le push a toujours le même comportement.
Moi, j'en ai et je vois vraiment pas en quoi c'est une hérésie.
J'ai un UITabbarController installé dans le rootViewController d'un UINavigationcontroller lui-même installé dans une modaleViewController... Et tout se passe bien, et je ne vois pas de pb d'ergonomie.
http://www.cimgf.com/2009/06/25/uitabbarcontroller-with-uinavigationcontroller-using-interface-builder/
J'essairai cette solution à midi.
Merci les gars.
Par contre, juste une dernière question avant de clore le topic : ma view detailVoiture (celle qui est appelé quand on sélectionne un élément de la tableView) quand elle s'affiche, ne recouvre pas la tabbar. Comment faire pour qu'elle la cache (si c'est possible)?
Et du coup pas besoin de NavigationController
Tant pis, y'aura la tabbar, c'est juste moins esthétique.