Aide à  propos de modalView

yodarkyodark Membre
décembre 2008 modifié dans API UIKit #1
Bonjour,

J'ai un problème qui semble simple mais qui me pose pas mal de problèmes. Dans mon application j'ouvre une ModalView c'est a dire une vue qui va se mettre au dessus de ma vue courante.

[[self self] presentModalViewController:mModalViewController animated:YES];


Par contre cette vue modale comporte deux "pages" autrement dit 2 vue (page 1 et page 2). J'utilise le même viewController pour ces pages.
Ce que je voudrais c'est appeler une fonction qui ferme ma vue modale et donc mes deux pages en même temps.
Le problème est que si j'appelle une deuxième fois
[[self self] presentModalViewController:mModalViewController animated:YES];

pour la deuxième page, je n'arrive pas a fermer les deux vue modales d'un coup
[self dismissModalViewControllerAnimated:true];

la page 2 se ferme et reste la page 1

Autre solution si je switch ma vue pour afficher simplement ma page 2  [self setView:mPage2ViewController.view];
alors mon contrôleur ne répond plus à  [self dismissModalViewControllerAnimated:true];


Donc ma question très simple est la suivante : Comment afficher deux vue modale et fermer les deux d'un coup ?


Réponses

  • Philippe49Philippe49 Membre
    20:46 modifié #2
    L'exemple SQLiteBooks est bien fait pour cela : le modal view controller est un UINavigationController ce qui est logique
  • yodarkyodark Membre
    20:46 modifié #3
    D'accord je me suis plongé dans la doc et l'exemple (jamais utilisé encore le UINavigationController) par contre ce qu'il me manque c'est comment faire pour passer de la page 1 à  la page 2 ?

    J'ai tenté d'appeler ma modale
    <br />PageViewController * mPageViewController =&nbsp; [[PageViewController alloc] initWithNibName:@&quot;Page1View&quot; bundle:nil];<br />		<br />		UINavigationController *secondNavigationController =<br />		<br />		[[UINavigationController alloc] initWithRootViewController:mPageViewController];<br />		[[self self] presentModalViewController:secondNavigationController animated:YES];
    


    puis plus tard je change de page. Je crée un view controller normal

    PageViewController * mPage2ViewController =&nbsp; [[PageViewController alloc] initWithNibName:@&quot;Page2View&quot; bundle:nil];
    



    ensuite je veux mettre cette vue dans mon UINavigationController modale
    [self pushViewController:mPage2ViewController animated:YES];
    


    Le problème est que self (PageViewController) ne peut pas répondre à  pushViewController car c'est pas un UINavigationController.

    Donc comment passer d'une vue la l'autre ?
    Merci !
  • Philippe49Philippe49 Membre
    20:46 modifié #4
    dans 1230561351:

    Le problème est que self (PageViewController) ne peut pas répondre à  pushViewController car c'est pas un UINavigationController.


    Essaie la property navigationController

    navigationController
    A parent or ancestor that is a navigation controller. (read-only)

    @property(nonatomic, readonly, retain) UINavigationController *navigationController
    Discussion
    Only returns a navigation controller if the view controller is in its stack. This property is nil if a navigation controller cannot be found.

  • yodarkyodark Membre
    20:46 modifié #5
    il doit me manquer quelque chose

    j'ai mis

    @property(nonatomic, readonly, retain) UINavigationController *navigationController

    dans le .h

    que j'ai synthetisé dans le .m

    puis je fais

    <br />PageViewController * mPageViewController =&nbsp; [[PageViewController alloc] initWithNibName:@&quot;Page2View&quot; bundle:nil]; <br />[navigationController pushViewController:mPageViewController animated:YES];
    


    Là  rien ne se passe. J'imagine qu'il faut lier navigationController au controleur actif ?

    Comment faire pour afficher cette deuxième page à  partire de navigationController ?
  • Philippe49Philippe49 Membre
    décembre 2008 modifié #6
    Bon j'ai essayé ton problème, et voici un mini-projet qui me semble sur la bonne voie, et qui dois encore être amélioré ( choses inutiles dedans, réfléchir sur l'architecture, ...) .

    Le principe de ce projet est

    • Une View-Based application, contenant un bouton.
    • Le bouton déclenche une session Modale, pilotée par un UINavigationController
    • Le navigation controller est dans le nib de la vue principale, et la page 1 en sert de vue racine, présentant une UITableView.
    • le nib de la page 1 peut accueillir un certain nombre de pages complémentaires, sous la forme de UIViewController.

    Ici tout est sous IB, et programmatiquement, une NSArray de UIViewController pilotée par la vue racine serait envisageable.
     
    [EDIT] fichier deux posts plus loin
  • yodarkyodark Membre
    20:46 modifié #7
    Merci beacoup c'est exactement ce qu'il me fallait ! D'une part j'ai résussi ce que je voulais en m'inspirant de ton code et d'autre part ça va m'être extrêmement utile pour comprendre l'utilisation de navigation controller et table view controller !
  • Philippe49Philippe49 Membre
    décembre 2008 modifié #8
    Bon le projet, un peu amélioré, l'idéal serait de faire sans code en incluant un UINavigationBar que l'on peut configurer dans chaque nib , mais la connexion du bouton "done" reste à  trouver.
Connectez-vous ou Inscrivez-vous pour répondre.