Problèmes implémentation ModalView
Je souhaite implémenter une modal view dans mon appli mais j'ai un petit souci. Celle-ci ne s'affiche pas.
La structure de mon appli est la suivante :
-> Tab Bar Controller
Tab Bar
-> Navigation Bar Controller
Navigation Bar
-> View Controller
J'ai une appli basé sur un projet Tab Bar. J'ai chaque vue Tab Bar est une Nav Bar. Je souhaite avoir une modal view lorsque je clique sur le bouton gauche de la nav bar mais cela ne fonctionne pas.
J'ai suivi le tutoriel du forum mais il est fait pour une appli avec seulement une nav bar.
Mon code d'implémentation est le suvant :
Merci par avance pour votre aide
La structure de mon appli est la suivante :
-> Tab Bar Controller
Tab Bar
-> Navigation Bar Controller
Navigation Bar
-> View Controller
J'ai une appli basé sur un projet Tab Bar. J'ai chaque vue Tab Bar est une Nav Bar. Je souhaite avoir une modal view lorsque je clique sur le bouton gauche de la nav bar mais cela ne fonctionne pas.
J'ai suivi le tutoriel du forum mais il est fait pour une appli avec seulement une nav bar.
Mon code d'implémentation est le suvant :
- (IBAction)modalViewAction:(id)sender<br />{ <br /> if(!modalViewController)<br /> {<br /> modalViewController=[[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil];<br /> }<br /> <br /> [self.tabBarController presentModalViewController:modalViewController animated:YES];<br />}
Merci par avance pour votre aide
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
The UINavigationBar class implements a control for navigating hierarchical content. It's a bar, typically displayed at the top of the screen, containing buttons for navigating up and down a hierarchy. The primary properties are a left (back) button, a center title, and an optional right button. You can specify custom views for each of these.
Cependant, tout view controller peut présenter une modal view. Si ta modalViewAction est définie dans le view controller qui présente la vue (est sur le dessus de la pile), et que le bouton est connecté vers ce view controller, alors un :
[self presentModalViewController:modalViewController animated:YES];
doit fonctionner.
J'ai testé :
mais ça ne fonctionne pas mieux.
Dans l'implementation de mon navigationController, j'ai :
Et dans le modalViewController, j'ai :
- (IBAction)modalViewAction:(id)sender
{
NSLog(@modal view action);
if(!modalViewController)
{
modalViewController=[[ModalViewController alloc] initWithNibName:@ModalViewController bundle:nil];
}
[self presentModalViewController:modalViewController animated:YES];
}
si oui, c'est que le UINavigationController (c'est bien la classe dont hérite ton navigationController ?) présente la modal view, mais ce n'est pas visible.
Dans ce cas, l'appli ne plante pas. Par contre si je fais self, self.tabBarController ou encore self.navigationController l'appli plante.
Comme tu l'as suggérer peut-être que la modalView n'est pas visible. Y a-t-il un moyen de la rendre visible ?
-> Tab Bar Controller
Tab Bar
-> Navigation Bar Controller
Navigation Bar
-> View Controller
La tab bar controller pilote en fait un tableau de view controllers (ils sont où dans ton arborescence ci-dessus?), et on peut accepter que l'un de ces view controller présente une Navigation Bar.
-> Tab Bar Controller
Tab Bar
-> First View Controller
-> Second View Controller
et la navigation bar apparaà®t dans le xib du Second View Controller et dans les fils de celui-ci
Bon, mais pourquoi pas ?
J'ai défini
-> UITabBarController
Tab Bar
-> MyNavigationController (fisrt tab)
-> SecondViewController (second tab)
MyNavigationController présente la vue d'un xib RootView.xib, qui est pilotée par un RootViewController.
La classe MyNavigationController possède une variable d'instance modalViewController, de clas ModalViewController, associé à un xib ModalView.xib
Un bouton de la barre de navigation lance l'action de présentation de la modal view
Un bouton de la modal view la fait disparaà®tre.
NSLog(@%@",modalViewController);
NSLog(@%@",self.modalViewController);
les vues référencées sont les mêmes.
J'ai donc pu comparer avec le mien et j'ai exactement la même chose sauf que mon appli plante. J'ai l'impression que c'est au niveau du nom du xib de la modalView dans la méthode action. Pourtant les noms correspondent bien.
C'est quoi le message d'erreur ?
J'ai copié ta modalView.xib à la place de la mienne et ça marche impec.
Merci beaucoup pour ton aide
Question subsidiaire : il est possible d'avoir la modal view déjà apparente au lancement de l'appli ?
Regarde du côté des méthodes du protocole UIApplicationDelegate pour intervenir au moment opportun.
J'ai cherché dans les docs du SDK et impossible de trouver une info sur ça. Je ne vois pas du tout quoi mettre dans cette méthode.
En installant dans l'interface de NetStatAppDelegate un IBOutlet vers le NavigationController, en connectant dans IB cet outlet, tu peux lancer la modal view par appel de la méthode associée