-Non résolu- Changer de vue

yodarkyodark Membre
août 2008 modifié dans API UIKit #1
Bonjour désolé pour cette question basique  :) mais comment fait-on pour changer de vue dans une application ?
Ce que j'ai fait pour l'instant c'est que j'ai creé un xib de ma vue j'ai fait un fichier viewcontroller de cette vue. J'ai implementé la nouvelle vue dans mon controller de vue principale
<br />RadarViewController *radarViewController;<br />@property (nonatomic, retain) RadarViewController *radarViewController;


dans un tuto j'ai récupéré le code suivant

if(radarViewController == nil)<br />	 {<br />		 //Initialize the controller.<br />		 RadarViewController *aController = [[RadarViewController alloc] initWithNibName:@&quot;RadarView&quot; bundle:nil];<br />		 <br />		 //Set the controller to our variable.<br />		 self.radarViewController = aController;<br />		 <br />		 //Release the temp controller<br />		 [aController release];<br />	 }<br />	 <br />	 //[radarViewController updateRowNumber:indexPath.row];<br />	 <br />	 //Add the controller to the top of the present view.<br />	 [[self navigationController] pushViewController:radarViewController animated:YES];


le problème est que ce tuto sert a changer de vue quand on utilise un navigation menu controller d'ou
[[self navigationController] pushViewController:radarViewController animated:YES];


Comment faire si je n'ai pas de controlleur de navigation dans mon cas? Comment simplement changer de vue ?

Réponses

  • Philippe49Philippe49 Membre
    13:26 modifié #2
    ton RadarViewController semble être de la classe NSViewController.


    Donc un simple changement de la property view de ce NSViewController peut suffire

    id oldView=[self view];
    NSRect frame=[oldView frame];
    // new view

    MyView * newView=[[[nomDeLaClasseDeLaNouvelleView alloc] initWithFrame:frame type:aType] autorelease];
    // replace view
    NSView * superview=[oldView superview];
    [superview replaceSubview:oldView with:newView];
    self.view=newView;  // fait un release sur oldView et un retain sur newView

  • yodarkyodark Membre
    13:26 modifié #3
    non mon RadarViewController est de la classe UIViewController
    Quelle différence entre les deux ? ce morceau de code ne fait pas référence au .nib ?!
  • Philippe49Philippe49 Membre
    13:26 modifié #4
    dans 1219677524:

    non mon RadarViewController est de la classe UIViewController

    A priori, aucun. A vérifier néanmoins compte-tenu de l'inversion du rôle des view et des window.

    dans 1219677524:

    Quelle différence entre les deux ? ce morceau de code ne fait pas référence au .nib ?!

    Il y a différentes possibilités :
    • Si tu veux utiliser une vue stockée dans un autre nib, il faut changer le viewController, pas la vue.
    • Si ton autre vue est dans le même nib que le UIViewController, tu n'as pas à  créer newView, tu la définis comme un outlet.
    • Si tu la crées de toute pièce, tu le fais dans le code comme ci-dessus
  • yodarkyodark Membre
    13:26 modifié #5
    ma vue est dans un nouveau .nib je dois donc changer de view controller ? Un peu comme dans le premier code que j'ai posté ? Quelle est la commande pour le faire ?

    cette commande ?
    [[self navigationController] pushViewController:radarViewController animated:YES];
    
    en changant navigationController par ma vue ? mais ca ne marche pas
  • Philippe49Philippe49 Membre
    13:26 modifié #6
    Je laisse quelqu'un d'autre répondre, je ne suis pas entré dans la programmation iPhone.
  • laurrislaurris Membre
    août 2008 modifié #7
    Dans la doc Apple existe un example 'ViewTransitions' et à  mon avis c'est ce que tu veux faire.

    La seule différence, c'est que les vues sont créées dans le code. Mais je vois pas trop de problème pour les instancier à  partir du nib:

    - Soit dans le - (void)viewDidLoad{} d'un UIViewController, il suffit de récupérer les outlets des vues qui auront été au préalable déclarés dans le header. Dans ce cas, il faut utiliser la template pour application avec un nib.

    - Soit en chargeant le nib à  la main comme dans ton premier message.
  • yodarkyodark Membre
    13:26 modifié #8
    J'ai regardé un peu la source que tu m'a donnée merci !
    J'ai constaté que le souci que j'ai est que mon application utilise un TabBarController c'est lui qui controle les vues. Et il n'y a pas de code source pour cette classe je ne peux donc pas modifier les évenements. Si je fais write class dans l'interface designer il me creer les deux classes mais il ne compile plus... Je suis un peu perdu la comment faire ?
  • phoenixadbphoenixadb Membre
    13:26 modifié #9
    Dans ton NavigationController tu met les .Nib que tu veux charger à  chaque controlleur via Interface Builder.
    Ensuite dans Xcode tu créé des classes de controller suivant quel type de controleur tu veux utiliser (image, vues, etc...)
    Une fois cela de fait, tu retournes dans IB et affectes les différentes classes  à  tes controleurs.
    Le problème du crash vient certainement du fait qu'il charge la mauvaises interface pour un controleur précis.
Connectez-vous ou Inscrivez-vous pour répondre.