Tuto : Une Nav-Bar dans un onglet de Tab-Bar
Philippe49
Membre
Une proposition d'architecture pour ajouter un UINavigationController dans l'un des view controller d'une Tab Bar.
Dans ce tuto très simple, tout est quasiment fait dans IB.
Page TabBar_NavBar
(à partir de la discussion dans ce post)
Dans ce tuto très simple, tout est quasiment fait dans IB.
Page TabBar_NavBar
(à partir de la discussion dans ce post)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Page TabBar_NavBar_2
Je te tire mon chapeau.
Le problème étant que "Renseigner le champ NibName pour les deux view controllers et supprimer (éventuellement) la vue qui est mise pour le FirstViewController." Je ne sais pas quoi mettre , j'imagine FirstViewController et SecondViewcontroller
Il faut creer FirstView.xib , ok mais bon pas d'info dessus ( j'ai réussi néanmoins à le creer )
"On y installe un UILabel pour vérifier le bon fonctionnement." J'ai mit dans le fichier crée FirstView une "view" et un label mais impossible de les relier ensemble..
Déjà si tu pouvais m'aider sûr ça m'aiderais bien.
Merci d'avance
NibName signifie le nom identifiant le xib associé au view controller.
FirstViewController est configuré dans le xib appelé FirstView
SecondViewController est configuré dans le xib appelé SecondView.
Le champ Nib Name se trouve dans le panel attributes lorsqu'on sélectionne le FirstViewController et le SecondViewController dans le MainWindow.xib
C'est une action élémentaire avec XCode.
Tu ouvres la librairie (menu Tools)
Dans le search field tu tapes UILabel.
Tu fais glisser un UILabel sur ta vue.
Tu double-cliques dedans et tu mets le texte que tu veux (ou tu ouvres le panel attributes du UILabel pour configurer cela)
C'est tout. (vérifie l'arborescence comme indiquée sur la page du tuto)
Il n'y a rien dans le fichier FirstViewController
J'ai un petit soucis, à la fin de la première page du tuto.
Voici l'erreur :
[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x524000
2009-06-01 11:40:47.776 Maquette[1004:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x524000'
Elle apparaà®t lorsque je veux accéder à la deuxième vue.
Savez vous d'ou cela peut venir ?
Merci
Ce message signifie que le message tableView:numberOfRowsInSection: a été envoyé à un UIViewController qui n'implémente pas cette méthode.
Vérifier dans IB que les Classes et Nib Name ont été correctement attribués (dans les trois fichiers xib).
J'essaye d'ajouter une barre de recherche dans le fichier SecondTable.xib, je crée donc une view dans laquelle je mets la barre de recherche ainsi que la TableView que j'avais déjà . Je ne sais pas ensuite comment procéder pour que la barre s'affiche(pour le système de recherche il n'y a pas de souci, j'ai réussi à le faire dans une application plus simple) :
- Si je lie m'a nouvelle view avec le File's Owner il y a un souci au lancement (normal je pense car le File's Owner (de type TableViewController) attend une TableView et non une view).
Pourriez vous me dire ou je me plante?
merci
Edit : voici l'erreur [UITableViewController loadView] loaded the "FirstTable" nib but didn't get a UITableView
1) Une UISearchbar est une UIView. cela ne sert à rien de la mettre dans une UIView. Il y a donc une UIView en trop dans cette interface.
2) Déplacer une UISearchBar de la library vers la view du xib et non vers une view qui se trouve dans le xib. On doit voir dans IB la searchBar dans la vue principale du secondTableViewController.
3) Créer un IBOutlet dans le code du SecondTableViewController
Ne pas oublier le @synthesize searchBar et le [searchBar release] dans le fichier .m
Il me manquait le [self.view addSubView:searchBar] aussi
J'ai remarqué qu'en laissant visible la StatusBar (commenter les 2 lignes dans "applicationDidFinishLaunching"), la TableView (dans le SecondTableViewController) ne s'affiche pas entièrement mais semble "glisser" légèrement sous la TabBar du bas.
J'ai fini par trouver une solution en jouant sur la TableView dans IB (TableView Size > ScrollView Size > Content > Inset > Bottom, et idem pour Scroller > Insets > Bottom, tous deux passé à 25 pour que ça marche). Mais je suis étonné que la TableView ne s'adapte pas toute seule à son container. J'ai raté un truc ou bien est-ce normal. Ma solution est-elle "propre" ainsi ?
Merci à ceux qui pourraient m'éclairer là dessus.
Sinon, tuto très utile.
--G
Le log donne {{0, 20}, {320, 460}} au lieu de {{0, 0}, {320, 460}}
Une solution par le code est
Il reste que ceci n'est pas une explication de ce comportement bizarre.
En prime, le proverbe du jour :
Ce que IB ne fais pas pour toi, le code te le fera
On remarquera que dans la doc parue depuis, Apple supprime la secondView pour insérer directement le navigationController.
Bienvenu sur PommeDev !
Merci pour ces conseils avisés. Je vais tester. Je suis aussi rassuré de ne pas avoir compris/fait les choses de travers...
--G
T'as peur d'un TabletMac? ;D
Hi,
No good, l'applicationFrame a un offset Y de 20 (hauteur de la StatusBar), du coup le phénomène persiste (en pire car j'ai une marge de 20 en haut).
Il faudrait combiner les 2 comme ceci :
CGRect newRect = navController.view.frame;
newRect.size.height -= [UIScreen mainScreen].applicationFrame.origin.y;
[navController.view setFrame:newRect];
Merci à vous...
--G.
Désolé mais j'ai fait le tour de la question en reprenant le tuto à zéro pour voir où j'avais m*rdé et en faisant aussi ce que tu suggères, sans succès. Je préfèrerais aussi ne pas coder ça, mais pour le moment je n'ai pas réussi autrement...
--G.
Essais quand même de persévérer de ce coté là .
Adrien